バッチ処理
CData JDBC Driver for Microsoft Dynamics 365 Finance and Operations では、JDBC batch API を通じて、Microsoft Dynamics 365 Finance and Operations の一括ロードサポートを活用することができます。batch API を使用して、関連するSQL データ操作ステートメントを同時に実行できます。
JDBC Batch API の使用
次の例は、PreparedStatement を使用して一括操作を実行する方法を示しています。
一括挿入
PreparedStatement を使用して一括挿入を実行するには、一括挿入の一部として実行するパラメータのセットごとにaddBatch を呼び出します。すべてのパラメータのセットをバッチに追加したら、executeBatch を呼び出して一括挿入を実行できます。
executeBatch メソッドは、各ステートメントの更新数を含む配列を返します。次に例を示します。
新しいレコードの主キーを取得するには、prepareStatement を呼び出すときにStatement.RETURN_GENERATED_KEYS フラグを設定し、executeBatch を呼び出した後にgetGeneratedKeys メソッドを呼び出します。
String query = "INSERT INTO Accounts (Name) VALUES(?)"; PreparedStatement pstmt = conn.prepareStatement(query,Statement.RETURN_GENERATED_KEYS); pstmt.setString(1, "Jon Doe"); pstmt.addBatch(); pstmt.setString(1, "John"); 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("AccountId")); }
一括更新
PreparedStatement を使用して一括更新を実行するには、一括更新の一部として実行するパラメータのセットごとにaddBatch を呼び出します。すべてのパラメータのセットをバッチに追加したら、executeBatch を呼び出します。
executeBatch メソッドは、配列内の各ステートメントの更新数を返します。次に例を示します。
String query = "UPDATE Accounts SET Name = ? WHERE AccountId = ?"; PreparedStatement pstmt = conn.prepareStatement(query); pstmt.setString(1,"Jon Doe"); pstmt.setString(2,"MyId"); pstmt.addBatch(); pstmt.setString(1,"John"); 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 Accounts WHERE AccountId = ?"; 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 に設定して、バッチ全体を送信します。