SQL
Java標準の機能を使用したDBの処理 についてまとめる。
JDBCドライバのダウンロード
DBの公式サイトからJDBCドライバをダウンロードして、クラスパスに配置する。
DBに接続する
public void doSql(){ // ドライバーのダウンロード Class.forName("org.postgresql.Driver"); String url = "jdbc:postgresql://localhost/jdbctestdb"; String user = "testuser"; String password = "testpass"; Connection conn = null; try{ conn = DriverManager.getConnection(url, user, password); // データベースに対する処理 }catch (SQLException e){ // 例外処理 }finally{ try{ if (conn != null){ conn.close(); } }catch (SQLException e){ // 例外処理 } } }
SQLの実行:SELECT
Statement stmt = connection.createStatement(); // selectの実行 String SQL = "SELECT * FROM テーブル名"; ResultSet rs = stmt.executeQuery(sql); // rs.next()で1行ずつデータを取得できる while(rs.next()){ // get*()メソッドの引数にカラム名を指定することで値を取得できる int code = rs.getInt("code"); String company = rs.getString("company"); } // 使い終わったらクローズする rs.close(); stmt.close();
カラムの値を取るのに使用できるメソッド例
- boolean getBoolean(String columnName)
- byte getByte(String columnName)
- Date getDate(String columnName)
- double getDouble(String columnName)
- int getInt(String columnName)
- long getLong(String columnName)
- Timestamp getTimestamp(String columnName)
SQLの実行:insert,update,delete
Statement statement = connection.createStatement(); // insertサンプル String sql="insert into product values(101,'Viz','Compact car',100);" statement.executeUpdate(sql); // updateサンプル sql="update product set price=price*1.1 where price>=200;" int result=statement.executeUpdate(sql); // deleteサンプル sql="delete product where price<=100;"; int result=statement.executeUpdate(sql);
SQLの実行:バインド変数の使用
バインド変数とは、プログラミング言語の実行環境からデータベース管理システム(DBMS)へSQL文を発行する際、一部を動的に変更できる変数にする機能のこと。
その部分に後から代入や変更を行ってもSQL文の再生成や解釈をし直す必要がなく、高速に実行することができる。
String selectStatement = "select title from books where title like ?"; PreparedStatement prepStmt = con.prepareStatement(selectStatement); prepStmt.setString(1, "%Java%"); ResultSet rs = prepStmt.executeQuery();
トランザクション制御
ConnectionクラスのsetAutoCommit(boolean)
メソッドで、自動コミットを適用するかどうかを選択できる。
デフォルトはtrueが設定されており、1クエリ実行後に自動的にコミットされている。
falseを設定した場合は、自動でコミットが実行されないため、明示的にcommit()もしくはrollback()メソッドを呼び出す必要がある。
public class SampleClass { public void doSql(){ // ドライバーのダウンロード Class.forName("org.postgresql.Driver"); String url = "jdbc:postgresql://localhost/jdbctestdb"; String user = "testuser"; String password = "testpass"; Connection conn = null; try{ conn = DriverManager.getConnection(url, user, password); conn.setAutoCommit(false); Statement statement = connection.createStatement(); String sql="insert into product values(101,'Viz','Compact car',100);" statement.executeUpdate(sql); conn.commit(); }catch (SQLException e){ try { conn.rollback(); } catch (SQLException ex) { // 例外処理 } }finally { try{ if (conn != null){ conn.close(); } }catch (SQLException e){ // 例外処理 } } } }