3

addBatch()のメソッドの隣には、クラス内のメソッドPreparedStatementもあります。addBatch(String)Statement

一連の異なるSQLステートメントを処理したいので、addBatch(String)がパフォーマンスに関して何を意味するのかについての説明を探しています。このメソッドを使用するのは安全(かつ高速)ですか、それともJavaで同様のSQLステートメントをグループ化してグループで実行する方が良いですか?

4

1 に答える 1

4

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

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

addBatch(String sql)はインターフェイスjava.sql.StatementaddBatch()定義され、java.sql.PreparedStatementはサブインターフェイスの1つで定義されますextends Statement。(その他はjava.sql.CallableStatement

JAVADocによると

addbatch(String sql)PreparedStatementメソッドをorCallableStatementおよびsqlで呼び出すことはできません。通常、これはSQLINSERTまたはUPDATEステートメントです。

addBatch()一括挿入または一括更新操作が必要な場合に推奨されます。

バッチ実行にはいくつかのブロッキング要因があります

DB make/version.
JDBC driver make/version.

例:MySQLを使用している場合は、最新のドライバーを使用して、接続文字列にrewriteBatchedStatements = trueを追加し、statement.addBatch()が実際にバッチ挿入を作成するようにします。

また、自動コミットがfalseであることを確認する必要があります。Javaで使用可能なヒープメモリが制約されている場合に役立つカウンタexecuteBatchに到達するカウンタを維持します。

例:

conn.setAutoCommit(false);  
PreparedStatement pStmt = conn.prepareStatement("INSERT INTO mytable (field1,field2) VALUES (?,?)");

for all values:
  pStmt.setString(1,val1);
  pStmt.setString(2,val2);
  pStmt.addBatch();    
  if ( i % 1000 == 0) {  
            pstmt.executeBatch();// Execute every 1000 items  
  } 
pstmt.executeBatch(); 
conn.commit(); 
于 2012-07-03T11:27:53.947 に答える