(Linux)自身のカーネルのversionの確認
unameコマンドを用いる
MPro:~$ uname -m x86_64 MPro:~ $ uname -n MPro.local MPro:~ $ uname -r 18.7.0 MPro:~ $ uname -s Darwin MPro:~ $ uname -v Darwin Kernel Version 18.7.0: Sun Dec 1 18:59:03 PST 2019; root:xnu-4903.278.19~1/RELEASE_X86_64 MPro:~ $ uname -a Darwin MPro.local 18.7.0 Darwin Kernel Version 18.7.0: Sun Dec 1 18:59:03 PST 2019; root:xnu-4903.278.19~1/RELEASE_X86_64 x86_64
(SQL)NVL・NVL2・COALESCE 関数
試験対策用
[NVL関数]
NVL関数は値がNULL値であった場合に、別の値を返す関数
使用法は以下の通り
NVL(式1, 式2)
第1引数の値がNULL値の場合、
第2引数の値を返します。第1引数の値がNULL値でなければ、
そのまま第1引数の値を返す
SELECT employee_id, employee_name, NVL(salary, 0) FROM employees WHERE employee_id IN (1017, 1018, 1019);
[NVL2関数]
NVL2関数は値がNULL値か否かを調べ、
NULL値以外の場合は値A、NULL値の場合は値Bを返す関数
使用法は以下の通り
NVL2(式1, 式2, 式3)
第1引数の値がNULL値以外の場合、第2引数の値を返す
第1引数の値がNULL値の場合、第3引数の値を返す
SELECT salary, NVL2(salary, 1, 0) FROM employees;
[COALESCE関数]
COALESCE関数は引数の値を判定し、
最初に見つかったNULL値以外の値を返す関数です。
使用法は以下の通りです。
COALESCE(式1, 式2 [, 式3 ...])
引数に指定された式全てがNULL値の場合、COALESCE関数はNULL値を返します。
SELECT commission, salary, employee_id,
COALESCE(commission, salary, employee_id)
FROM employees
WHERE employee_id >= 1016;
(JAVA)複数のレコードをSQLでselectする場合
個人開発用
listとArrayListを使う。
package pg_4_02_2; import java.util.List; /**----------------------------------------------------------------------* *■■■Sample4_02_2_Sel_BusinessLogicクラス■■■ *概要:ビジネスロジック(全ユーザーの情報抽出) *----------------------------------------------------------------------**/ public class Sample4_02_2_Sel_BusinessLogic { //定数 private static String COMMA = ","; //コンマ /**----------------------------------------------------------------------* *■extractionAllメソッド *概要 :全ユーザーの情報を抽出し、コマンドライン上に表示する *引数 :なし *戻り値:なし *----------------------------------------------------------------------**/ public void extractionAll () { //------------------------------------------- //データベースへの接続を実施 //------------------------------------------- //DAOクラスをインスタンス化&データを抽出するよう依頼 Sample4_02_2_Common_DAO dao = new Sample4_02_2_Common_DAO(); List<Sample4_02_2_Common_DTO> extractedDtoList = dao.selectMemberInfoAll(); //------------------------------------------- //抽出したユーザー情報をコマンドライン上に表示 //------------------------------------------- if(extractedDtoList != null){ for(int i = 0 ; i < extractedDtoList.size() ; i++){ //1レコード分のデータを取得&加工(各カラムをコンマ綴りで結合) StringBuffer rsbuf = new StringBuffer(); rsbuf.append(extractedDtoList.get(i).getId()); rsbuf.append(COMMA); rsbuf.append(extractedDtoList.get(i).getName()); rsbuf.append(COMMA); rsbuf.append(extractedDtoList.get(i).getGender()); rsbuf.append(COMMA); rsbuf.append(extractedDtoList.get(i).getAge()); rsbuf.append(COMMA); rsbuf.append(extractedDtoList.get(i).getCourse()); //加工作成した1レコード分のデータを表示 System.out.println(rsbuf.toString()); } } else { System.out.println("[INFO]該当のユーザー情報を取得できませんでした" ) ; } } }
メインメソッド
package pg_4_02_2; /**----------------------------------------------------------------------* *■■■Sample4_02_2_Sel_Mainクラス■■■ *概要:メイン(ユーザーの情報抽出) *----------------------------------------------------------------------**/ public class Sample4_02_2_Sel_Main { public static void main (String[] args) { //ビジネスロジック(ユーザーの情報抽出)クラスのインスタンス化&メソッド起動 Sample4_02_2_Sel_BusinessLogic blSel = new Sample4_02_2_Sel_BusinessLogic(); blSel.extractionAll(); } }
package pg_4_02_2; /**----------------------------------------------------------------------* *■■■Sample4_02_2_Common_DTOクラス■■■ *概要:DTO(memberテーブル) *----------------------------------------------------------------------**/ public class Sample4_02_2_Common_DTO { //---------------------------------------------------------------- //フィールド //---------------------------------------------------------------- private int id ; //ID private String name ; //名前 private String gender ; //性別(男:M/女:F) private int age ; //年齢 private String course ; //コース //---------------------------------------------------------------- //getter/setter //---------------------------------------------------------------- //getter/setter(対象フィールド:id) public int getId() {return id;} public void setId(int id) {this.id = id;} //getter/setter(対象フィールド:name) public String getName() {return name;} public void setName(String name) {this.name = name;} //getter/setter(対象フィールド:gender) public String getGender() {return gender;} public void setGender(String gender) {this.gender = gender;} //getter/setter(対象フィールド:age) public int getAge() {return age;} public void setAge(int age) {this.age = age;} //getter/setter(対象フィールド:course) public String getCourse() {return course;} public void setCourse(String course) {this.course = course;} }
DAO
package pg_4_02_2; import java.sql.DriverManager; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.List; import java.util.ArrayList; /**----------------------------------------------------------------------* *■■■Sample4_02_2_Common_DAOクラス■■■ *概要:DAO(uzuz_memberテーブル) *----------------------------------------------------------------------**/ public class Sample4_02_2_Common_DAO { //------------------------------------------- //データベースへの接続情報 //------------------------------------------- //JDBCドライバの相対パス //※バージョンによって変わる可能性があります(MySQL5系の場合は「com.mysql.jdbc.Driver」) String DRIVER_NAME = "com.mysql.cj.jdbc.Driver"; //接続先のデータベース //※データベース名が「test_db」でない場合は該当の箇所を変更してください String JDBC_URL = "jdbc:mysql://localhost/test_db?characterEncoding=UTF-8&serverTimezone=JST&useSSL=false"; //接続するユーザー名 //※ユーザー名が「test_user」でない場合は該当の箇所を変更してください String USER_ID = "test_user"; //接続するユーザーのパスワード //※パスワードが「test_pass」でない場合は該当の箇所を変更してください String USER_PASS = "test_pass"; //---------------------------------------------------------------- //メソッド //---------------------------------------------------------------- /**----------------------------------------------------------------------* *■selectMemberInfoAllメソッド *概要 :「member」テーブルのレコードをすべて抽出する *引数 :なし *戻り値:抽出データ(List<Sample4_02_2_Common_DTO>型) *----------------------------------------------------------------------**/ public List<Sample4_02_2_Common_DTO> selectMemberInfoAll(){ //------------------------------------------- //JDBCドライバのロード //------------------------------------------- try { Class.forName(DRIVER_NAME); //JDBCドライバをロード&接続先として指定 } catch (ClassNotFoundException e) { e.printStackTrace(); } //------------------------------------------- //SQL発行 //------------------------------------------- //JDBCの接続に使用するオブジェクトを宣言 //※finallyブロックでも扱うためtryブロック内で宣言してはいけないことに注意 Connection con = null ; // Connection(DB接続情報)格納用変数 PreparedStatement ps = null ; // PreparedStatement(SQL発行用オブジェクト)格納用変数 ResultSet rs = null ; // ResultSet(SQL抽出結果)格納用変数 //抽出データ(List型)格納用変数 //※最終的にreturnするため、tryブロック内で宣言してはいけないことに注意 List<Sample4_02_2_Common_DTO> dtoList = new ArrayList<Sample4_02_2_Common_DTO>(); try { //------------------------------------------- //接続の確立(Connectionオブジェクトの取得) //------------------------------------------- con = DriverManager.getConnection(JDBC_URL, USER_ID, USER_PASS); //------------------------------------------- //SQL文の送信 & 結果の取得 //------------------------------------------- //発行するSQL文の生成(SELECT) StringBuffer buf = new StringBuffer(); buf.append(" SELECT "); buf.append(" id , "); buf.append(" name , "); buf.append(" gender , "); buf.append(" age , "); buf.append(" course "); buf.append(" FROM "); buf.append(" uzuz_member "); //PreparedStatement(SQL発行用オブジェクト)を生成&発行するSQLをセット ps = con.prepareStatement(buf.toString()); //SQL文の送信&戻り値としてResultSet(SQL抽出結果)を取得 rs = ps.executeQuery(); //ResultSetオブジェクトから1レコード分のデータをDTOに格納 while(rs.next()){ Sample4_02_2_Common_DTO dto = new Sample4_02_2_Common_DTO(); dto.setId( rs.getInt( "id" ) ); dto.setName( rs.getString( "name" ) ); dto.setGender( rs.getString( "gender" ) ); dto.setAge( rs.getInt( "age" ) ); dto.setCourse( rs.getString( "course" ) ); dtoList.add(dto); } } catch (SQLException e) { e.printStackTrace(); } finally { //------------------------------------------- //接続の解除 //------------------------------------------- //ResultSetオブジェクトの接続解除 if (rs != null) { //接続が確認できている場合のみ実施 try { rs.close(); //接続の解除 } catch (SQLException e) { e.printStackTrace(); } } //PreparedStatementオブジェクトの接続解除 if (ps != null) { //接続が確認できている場合のみ実施 try { ps.close(); //接続の解除 } catch (SQLException e) { e.printStackTrace(); } } //Connectionオブジェクトの接続解除 if (con != null) { //接続が確認できている場合のみ実施 try { con.close(); //接続の解除 } catch (SQLException e) { e.printStackTrace(); } } } //抽出データを戻す return dtoList; } }
(JAVA)ビジネスロジックとDAOについて
ある一連のプログラムにおいて、
他のプログラムから使いまわされることのないそのプログラム固有の処理のことを
ビジネスロジック
データベースにアクセスする機能をまとめたデータベースアクセス
専用のクラスのことをDAO(Data Access Object)
メインメソッドつきビジネスロジックは1つ
メインメソッドが4つあればビジネスロジックは4つ
だが、DAOは1つ
(DAOはテーブル単位で定義することが一般的)
DAOはSQLとwebアプリの連携を行う。
クラスやメソッド間で複数のデータをまとめて受け渡す際に
使用されるクラスをDTO (Data Transfer Object)と言います。
基本的にDTOはそのクラスブロック内に
フィールドとgetter/setter のみしか持たない。
(JAVA)JDBCについて
前提条件として
JDBC( Java Database Connectivity )は
RDBMSにアクセスするために 用意されたJavaのAPIである
JDBC APIではJDBCドライバを用いて以下の機能が提供されている。
1 RDBMSとの接続の確立
2 SQLの送信
3 SQL実行結果の処理
4 RDBMSとの接続の解除
package sample; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class Sample { //定数 private static String COMMA = ","; //コンマ public static void main(String[] args) { //------------------------------------------- //データベースへの接続情報 //------------------------------------------- //JDBCドライバの相対パス //※バージョンによって変わる可能性があります(MySQL5系の場合は「com.mysql.jdbc.Driver」) String driverName = "com.mysql.cj.jdbc.Driver"; //接続先のデータベース //※データベース名が「test_db」でない場合は該当の箇所を変更してください String jdbcUrl = "jdbc:mysql://localhost/test_db?characterEncoding=UTF-8&serverTimezone=JST&useSSL=false"; //接続するユーザー名 //※ユーザー名が「test_user」でない場合は該当の箇所を変更してください String userId = "test_user"; //接続するユーザーのパスワード //※パスワードが「test_pass」でない場合は該当の箇所を変更してください String userPass = "test_pass"; //------------------------------------------- //① JDBCドライバのロード //------------------------------------------- try { Class.forName(driverName); //JDBCドライバをロード&接続先として指定 } catch (ClassNotFoundException e) { e.printStackTrace(); } //JDBCの接続に使用するオブジェクトを宣言 //※finallyブロックでも扱うためtryブロック内で宣言してはいけないことに注意 Connection con = null ; // Connection(DB接続情報)格納用変数 PreparedStatement ps = null ; // PreparedStatement(SQL発行用オブジェクト)格納用変数 ResultSet rs = null ; // ResultSet(SQL抽出結果)格納用変数 try { //------------------------------------------- // ②接続の確立(Connectionオブジェクトの取得) //------------------------------------------- con = DriverManager.getConnection(jdbcUrl, userId, userPass); //------------------------------------------- // ③SQL文の送信 & ④抽出結果の取得 //------------------------------------------- //SQL文の生成(SELECT) StringBuffer buf = new StringBuffer() ; buf.append(" SELECT "); buf.append(" id , "); buf.append(" name , "); buf.append(" gender , "); buf.append(" age , "); buf.append(" course "); buf.append(" FROM "); buf.append(" uzuz_member "); buf.append(" ORDER BY "); buf.append(" id "); //PreparedStatementオブジェクトを生成&発行するSQLをセット ps = con.prepareStatement(buf.toString()); //SQL文の送信&抽出結果(ResultSetオブジェクト)の取得 rs = ps.executeQuery(); //ResultSetオブジェクトから1レコードずつデータを取得&加工&表示する while (rs.next()) { //1レコード分のデータを取得&加工(各カラムをコンマ綴りで結合) StringBuffer rsbuf = new StringBuffer(); rsbuf.append(rs.getString("id")); rsbuf.append(COMMA); rsbuf.append(rs.getString("name")); rsbuf.append(COMMA); rsbuf.append(rs.getString("gender")); rsbuf.append(COMMA); rsbuf.append(rs.getString("age")); rsbuf.append(COMMA); rsbuf.append(rs.getString("course")); //加工作成した1レコード分のデータを表示 System.out.println(rsbuf.toString()); } } catch (SQLException e) { e.printStackTrace(); } finally { //------------------------------------------- // ⑤接続の解除 //------------------------------------------- //ResultSetオブジェクトの接続解除 if (rs != null) { //接続が確認できている場合のみ実施 try { rs.close(); //接続の解除 } catch (SQLException e) { e.printStackTrace(); } } //PreparedStatementオブジェクトの接続解除 if (ps != null) { //接続が確認できている場合のみ実施 try { ps.close(); //接続の解除 } catch (SQLException e) { e.printStackTrace(); } } //Connectionオブジェクトの接続解除 if (con != null) { //接続が確認できている場合のみ実施 try { con.close(); //接続の解除 } catch (SQLException e) { e.printStackTrace(); } } } } }
ネットのサンプルコードではwindowsだった為
mac版で
ドライブを作成する必要あり。
buf.appendメソッドを使うことによりメモリを抑えることができる。
+と同じ意味となる。