English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

JDBC バッチ処理(Batch)

バッチ処理は、関連するSQL文を一つのバッチにまとめ、データベースへの一度の呼び出しで提出することができます。

一度に複数のSQL文をデータベースに送信すると、通信コストを削減し、パフォーマンスを向上させることができます。

  • JDBCドライバーはこの機能をサポートする必要はありません。バッチ更新処理をサポートするかどうかを確認するには、DatabaseMetaData.supportsBatchUpdates()メソッドを使用します。JDBCドライバーがこの機能をサポートしている場合、このメソッドはtrueを返します。

  • Statement、PreparedStatement、CallableStatementのaddBatch()メソッドは、バッチに単一の文書を追加するために使用されます。executeBatch()は、組み合わせてすべての文書を実行するために使用されます。

  • executeBatch()は整数の配列を返し、配列の各要素は対応するupdate文の更新カウントを示します。

  • 批処理に文書を追加して処理するように、clearBatch()メソッドを使用してそれらを削除することもできます。このメソッドは、addBatch()メソッドに追加されたすべての文書を削除しますが、削除する文書を選択することはできません。

文書オブジェクトを使用して批処理を行います

これは、批処理とStatementオブジェクトを一緒に使用する典型的な手順シーケンスです-

  • これらの2つを使用してcreateStatement()メソッドを使用して Statement オブジェクトを作成します。

  • setAutoCommit()を使用して auto-commit が false に設定されています。

  • 作成した文書オブジェクトにaddBatch()メソッドを使用して、任意の数のSQL文をバッチに追加します。

  • executeBatch()メソッドを使用して、作成したステートメントオブジェクトに対してすべてのSQL文を実行します。

  • 最後に、commit()すべての変更をコミットする方法です。

以下のコードセグメントは、Statementオブジェクトを使用してバッチ更新を行う例を提供します-

// 文書オブジェクトを作成します
Statement stmt = conn.createStatement();
// 自動コミットをfalseに設定します
conn.setAutoCommit(false);
// SQL文を作成します
String SQL = "INSERT INTO Employees (id, first, last, age) "; +
             "VALUES(200,'Zia', 'Ali', 30)";
// 上記のSQL文を批処理に追加します。
stmt.addBatch(SQL);
// もう一つのSQL文を作成します
String SQL = "INSERT INTO Employees (id, first, last, age) "; +
             "VALUES(201,'Raj', 'Kumar', 35)";
// 上記のSQL文を批処理に追加します。
stmt.addBatch(SQL);
// もう一つのSQL文を作成します
String SQL = "UPDATE Employees SET age = 35 " +
             "WHERE id = 100";
// 上記のSQL文を批処理に追加します。
stmt.addBatch(SQL);
// 返される値を保存するためのint[]を作成します
int[] count = stmt.executeBatch();
//変更を適用するために明確なコミット文を指定します
conn.commit();

よりよく理解するために、以下を研究しましょうバッチ処理の例コード

PrepareStatementオブジェクトを使用して批処理を行います

これは、批処理とPrepareStatementオブジェクトを一緒に使用する典型的な手順シーケンスです-

  1. 占位符を使用してSQL文を作成します。

  2. どの PrepareStatement()メソッドを使用しても、PrepareStatementオブジェクトを作成します。

  3. setAutoCommit()を使用して auto-commit が false に設定されています。

  4. addBatch()メソッドを使用して、作成したステートメントオブジェクトにできるだけ多くのSQL文をバッチに追加します。

  5. executeBatch()メソッドを使用して、作成したステートメントオブジェクトに対してすべてのSQL文を実行します。

  6. 最後に、commit()すべての変更をコミットする方法です。

以下のコードセグメントは、PrepareStatementオブジェクトを使用してバッチ更新を行う例を提供します-

// SQL文を作成します
String SQL = "INSERT INTO Employees (id, first, last, age) "; +
             "VALUES(?, ?, ?, ?)";
// PrepareStatementオブジェクトを作成します
PreparedStatemen pstmt = conn.prepareStatement(SQL);
//自動コミットをfalseに設定します
conn.setAutoCommit(false);
// 変数を設定します
pstmt.setInt( 1, 400);
pstmt.setString( 2, "Pappu");
pstmt.setString( 3, "Singh");
pstmt.setInt( 4, 33 );
// それをバッチに追加します
pstmt.addBatch();
// 変数を設定します
pstmt.setInt( 1, 401 );
pstmt.setString( 2, "Pawan");
pstmt.setString( 3, "Singh");
pstmt.setInt( 4, 31 );
// それをバッチに追加します
pstmt.addBatch();
//さらにバッチを追加します
.
.
.
.
//返される値を保存するためのint[]を作成します
int[] count = stmt.executeBatch();
//変更を適用するために明確なコミット文を指定します
conn.commit();

よりよく理解するために、以下を研究しましょうバッチ処理の例コード