Jdbc-batch-processing

提供:Dev Guides
移動先:案内検索

JDBC-バッチ処理

バッチ処理を使用すると、関連するSQLステートメントをバッチにグループ化し、データベースへの1回の呼び出しでそれらを送信できます。

複数のSQLステートメントを一度にデータベースに送信すると、通信オーバーヘッドの量が減り、パフォーマンスが向上します。

  • この機能をサポートするためにJDBCドライバーは必要ありません。 _DatabaseMetaData.supportsBatchUpdates()_メソッドを使用して、ターゲットデータベースがバッチ更新処理をサポートしているかどうかを判断する必要があります。 JDBCドライバーがこの機能をサポートしている場合、メソッドはtrueを返します。
  • Statement、PreparedStatement、、および_CallableStatement_の* addBatch()*メソッドは、個々のステートメントをバッチに追加するために使用されます。 * executeBatch()*は、グループ化されたすべてのステートメントの実行を開始するために使用されます。
  • * executeBatch()*は整数の配列を返し、配列の各要素はそれぞれの更新ステートメントの更新カウントを表します。
  • 処理のためにステートメントをバッチに追加できるように、* clearBatch()*メソッドを使用してステートメントを削除できます。 このメソッドは、addBatch()メソッドで追加したすべてのステートメントを削除します。 ただし、削除するステートメントを選択的に選択することはできません。

Statementオブジェクトを使用したバッチ処理

ステートメントオブジェクトでバッチ処理を使用するための典型的な一連の手順を次に示します-

  • _createStatement()_メソッドを使用してStatementオブジェクトを作成します。
  • _setAutoCommit()_を使用して自動コミットをfalseに設定します。
  • 作成されたステートメントオブジェクトで_addBatch()_メソッドを使用して、必要な数のSQLステートメントをバッチに追加します。
  • 作成されたステートメントオブジェクトで_executeBatch()_メソッドを使用して、すべてのSQLステートメントを実行します。
  • 最後に、_commit()_メソッドを使用してすべての変更をコミットします。

次のコードスニペットは、Statementオブジェクトを使用したバッチ更新の例を提供します-

//Create statement object
Statement stmt = conn.createStatement();

//Set auto-commit to false
conn.setAutoCommit(false);

//Create SQL statement
String SQL = "INSERT INTO Employees (id, first, last, age) " +
             "VALUES(200,'Zia', 'Ali', 30)";
//Add above SQL statement in the batch.
stmt.addBatch(SQL);

//Create one more SQL statement
String SQL = "INSERT INTO Employees (id, first, last, age) " +
             "VALUES(201,'Raj', 'Kumar', 35)";
//Add above SQL statement in the batch.
stmt.addBatch(SQL);

//Create one more SQL statement
String SQL = "UPDATE Employees SET age = 35 " +
             "WHERE id = 100";
//Add above SQL statement in the batch.
stmt.addBatch(SQL);

//Create an int[] to hold returned values
int[] count = stmt.executeBatch();

//Explicitly commit statements to apply changes
conn.commit();

よりよく理解するために、リンク:/jdbc/statement-batching-example [Batching-Example Code]を調べてみましょう。

PrepareStatementオブジェクトを使用したバッチ処理

これは、バッチ処理をPrepareStatementオブジェクトで使用するための典型的な一連の手順です-

  1. プレースホルダーを使用してSQLステートメントを作成します。
  2. _prepareStatement()_メソッドを使用してPrepareStatementオブジェクトを作成します。
  3. _setAutoCommit()_を使用して自動コミットをfalseに設定します。
  4. 作成されたステートメントオブジェクトで_addBatch()_メソッドを使用して、必要な数のSQLステートメントをバッチに追加します。
  5. 作成されたステートメントオブジェクトで_executeBatch()_メソッドを使用して、すべてのSQLステートメントを実行します。
  6. 最後に、_commit()_メソッドを使用してすべての変更をコミットします。

次のコードスニペットは、PrepareStatementオブジェクトを使用したバッチ更新の例を提供します-

//Create SQL statement
String SQL = "INSERT INTO Employees (id, first, last, age) " +
             "VALUES(?, ?, ?, ?)";

//Create PrepareStatement object
PreparedStatemen pstmt = conn.prepareStatement(SQL);

//Set auto-commit to false
conn.setAutoCommit(false);

//Set the variables
pstmt.setInt( 1, 400 );
pstmt.setString( 2, "Pappu" );
pstmt.setString( 3, "Singh" );
pstmt.setInt( 4, 33 );
//Add it to the batch
pstmt.addBatch();

//Set the variables
pstmt.setInt( 1, 401 );
pstmt.setString( 2, "Pawan" );
pstmt.setString( 3, "Singh" );
pstmt.setInt( 4, 31 );
//Add it to the batch
pstmt.addBatch();

//add more batches
.
.
.
.
//Create an int[] to hold returned values
int[] count = stmt.executeBatch();

//Explicitly commit statements to apply changes
conn.commit();

よりよく理解するために、リンク:/jdbc/preparestatement-batching-example [Batching-Example Code]を調べてみましょう。