ORACLE SQL リファレンス(逆引き)

ORACLE SQL リファレンス

Web oracle.se-free.com
JDBC2.0標準のバッチ更新する
スポンサード リンク

バッチ更新とは、insert/update/deleteのSQLを纏めてデータベースに送信して、 SQL発行回数を減らすことにより、データベース更新のパフォーマンスが向上します。

このバッチ更新方式は、JDBC2.0準拠の方式とORACLE独自の方式の2種類あります。

ORACLE独自の方式の方が性能的に優れているので、性能を重視する場合は、ORACLE独自の方式、汎用性を重視する場合は、JDBC2.0の方式を使用します。

●JDBC2.0標準のバッチ更新の方法は、

 (1) 自動コミットを無効にする。

 (2) PreparedStatementオブジェクトをSQL文を指定して取得する。

 (3) addBatch()メソッドで、更新するSQLを溜め込みます。

 (4) executeBatch()メソッドで、溜め込んだSQLをDBへ送信します。

 (5) コミットする。

 (6) 処理が終了したら、PreparedStatementをクローズします。

例1) 表「emp」テーブルに4レコードinsertする。
import java.sql.*;

public class BatchUpdateStd {

  public static void main(String[] args) throws SQLException {

    Connection con = null;
    PreparedStatement stm = null;

    try {
      DriverManager.registerDriver(new oracle.jdbc.OracleDriver());
      con = DriverManager.getConnection(
                   "jdbc:oracle:thin:@127.0.0.1:1521:ORCL","test","test");

      // 自動コミットを無効にする。
      con.setAutoCommit(false);

      // PrepareStatement取得
      stm = con.prepareStatement("insert into emp values (?,?,?,?)");

      // 1レコード目のinsert
      stm.setString(1,"E01");      // 列「emp_id」の値を設定
      stm.setString(2,"D01");      // 列「dept_id」の値を設定
      stm.setString(3,"なまえ1"); // 列「name」の値を設定
      stm.setInt(4,100);           // 列「salary」の値を設定
      stm.addBatch();              // バッチ処理するSQLに追加

      // 2レコード目のinsert
      stm.setString(1,"E02");      // 列「emp_id」の値を設定
      stm.setString(2,"D02");      // 列「dept_id」の値を設定
      stm.setString(3,"なまえ2"); // 列「name」の値を設定
      stm.setInt(4,130);           // 列「salary」の値を設定
      stm.addBatch();              // バッチ処理するSQLに追加

      // 3レコード目のinsert
      stm.setString(1,"E03");      // 列「emp_id」の値を設定
      stm.setString(2,"D02");      // 列「dept_id」の値を設定
      stm.setString(3,"なまえ3"); // 列「name」の値を設定
      stm.setInt(4,200);           // 列「salary」の値を設定
      stm.addBatch();              // バッチ処理するSQLに追加

      // 4レコード目のinsert
      stm.setString(1,"E04");      // 列「emp_id」の値を設定
      stm.setString(2,"D02");      // 列「dept_id」の値を設定
      stm.setString(3,"なまえ4"); // 列「name」の値を設定
      stm.setInt(4,200);           // 列「salary」の値を設定
      stm.addBatch();              // バッチ処理するSQLに追加

      // 溜まっているバッチ更新を実行する。
      stm.executeBatch();         // SQLの実行

      // コミットする。
      con.commit();

    } catch (SQLException ex) {
       // DBアクセスエラーの場合は、ロールバックする。
       con.rollback();

    } finally {
      if ( stm != null ) {
        // Statement クローズ
        stm.close();
      }
      if ( con != null ) {
        // コネクションクローズ
        con.close();
      }
    }

  }
}

スポンサード リンク


バインド変数を使用してSELECTする(PrepareStatement〜ResultSet)
バインド変数を使用してINSERT/UPDATE/DELETEする(PrepareStatement)
ORACLE独自のバッチ更新する
JDBC2.0標準のバッチ更新する

JDBC へ
忘れっぽいエンジニアのオラクルSQLリファレンス TOPへ