バッチ処理
CData JDBC Driver for MySQL では、JDBC batch API を通じて、MySQL の一括ロードサポートを活用することができます。batch API を使用して、関連するSQL データ操作ステートメントを同時に実行できます。
JDBC Batch API の使用
次の例は、PreparedStatement を使用して一括操作を実行する方法を示しています。
一括挿入
PreparedStatement を使用して一括挿入を実行するには、一括挿入の一部として実行するパラメータのセットごとにaddBatch を呼び出します。すべてのパラメータのセットをバッチに追加したら、executeBatch を呼び出して一括挿入を実行できます。
executeBatch メソッドは、各ステートメントの更新数を含む配列を返します。次に例を示します。
新しいレコードの主キーを取得するには、prepareStatement を呼び出すときにStatement.RETURN_GENERATED_KEYS フラグを設定し、executeBatch を呼び出した後にgetGeneratedKeys メソッドを呼び出します。
String query = "INSERT INTO `sakila`.Orders (ShipCity) VALUES (?)"; PreparedStatement pstmt = conn.prepareStatement(query,Statement.RETURN_GENERATED_KEYS); pstmt.setString(1, "Raleigh"); pstmt.addBatch(); pstmt.setString(1, "New York"); pstmt.addBatch(); int[] r = pstmt.executeBatch(); for(int i: r) System.out.println(i); ResultSet rs = pstmt.getGeneratedKeys(); while(rs.next()){ System.out.println(rs.getString("Id")); }
一括更新
PreparedStatement を使用して一括更新を実行するには、一括更新の一部として実行するパラメータのセットごとにaddBatch を呼び出します。すべてのパラメータのセットをバッチに追加したら、executeBatch を呼び出します。
executeBatch メソッドは、配列内の各ステートメントの更新数を返します。次に例を示します。
String query = "UPDATE `sakila`.Orders SET ShipCity = ? WHERE Id = ?"; PreparedStatement pstmt = conn.prepareStatement(query); pstmt.setString(1,"Raleigh"); pstmt.setString(2,"MyId"); pstmt.addBatch(); pstmt.setString(1,"New York"); pstmt.setString(2,"MyId2"); pstmt.addBatch(); int[] r = pstmt.executeBatch(); for(int i: r) System.out.println(i);
一括削除
PreparedStatement を使用して一括削除を実行するには、一括削除の一部として実行するパラメータのセットごとにaddBatch を呼び出します。すべてのパラメータのセットをバッチに追加したら、executeBatch を呼び出します。
executeBatch メソッドは、配列内の各ステートメントの更新数を返します。次に例を示します。
String query = "DELETE FROM `sakila`.Orders WHERE Id = ?"; PreparedStatement pstmt = conn.prepareStatement(query); pstmt.setString(1,"MyId1"); pstmt.addBatch(); pstmt.setString(1,"MyId2"); pstmt.addBatch(); int[] r = pstmt.executeBatch(); for(int i: r) System.out.println(i);
バッチサイズの設定
サーバーに送信されるリクエストのサイズに制限がある場合は、バッチサイズの最大値を設定する必要があります。BatchSize プロパティを設定して、バッチ全体を指定された値のバッチに分割します。各バッチは、個別にサーバーに送信されます。
または、BatchSize を0 に設定して、バッチ全体を送信します。