バッチSQL文
3038 ワード
役割:複数のSQLを送りたいです。また、データベースシステムとの相互作用を低減したいです。この時にバッチ処理を使います。 一)Sttementオブジェクト——異なる構造のSQL文を一括処理するのに適しています。 ステップ: 1)所与のSQLコマンドをSttementオブジェクトの現在のコマンドリストに追加します。 void addBatch(String sql); 2)一連のコマンドをデータベースに提出して実行します。すべてのコマンドが実行に成功すれば、カウントを更新する配列を返します。 int[]executeBatch() 戻り値: 1>0以上の数-コマンドの処理に成功したことを示し、実行コマンドに影響を与えるデータベースの行数を与える更新カウントです。 2>SUCCESS_NOの_INFOの値-コマンドの実行に成功したことを示しますが、影響を受ける行数は不明です。 3>EXECUTE_FAILDの値-コマンドの実行に失敗したことを示しています。コマンドが失敗した場合のみ、ドライバは命令を処理し続けます。 3)このSttementオブジェクトの現在のSQLコマンドのリストを空にします。 void clear Batch(); コード:
二)PreparedSttementオブジェクト——同じ機構のSQL文に対してバッチ操作を行うのに適しています。 重点クラス: void addBatch(); void executeBatch() void clear Batch(); コード:
/* , */
stmt = conn.createStatement();
/* SQL */
stmt.addBatch(SqlMapping.ADD_USER_SQL);
stmt.addBatch(SqlMapping.MODIFIED_USER_SQL);
/* SQL */
int[] rows = stmt.executeBatch();
System.out.println(rows.length);
/* SQL */
stmt.clearBatch();
二)PreparedSttementオブジェクト——同じ機構のSQL文に対してバッチ操作を行うのに適しています。 重点クラス: void addBatch(); void executeBatch() void clear Batch(); コード:
/* , !*/
pstmt = conn.prepareStatement(SqlMapping.ADD_USER_PRSQL);
for (int i = 0; i < 1003; i++) {
pstmt.setString(1, "jack" + i);
pstmt.setInt(2, (i + 15) % 30);
pstmt.addBatch();
if (0 == (i % 100)) {
pstmt.executeBatch();
pstmt.clearBatch();
}
}
pstmt.addBatch();
pstmt.execute();
pstmt.clearBatch();