jdbcバッチインサートとクエリと、enteratedキーを備えたシングルインサート
-
27-10-2019 - |
質問
自動的にキーを生成するテーブルにたくさんの行を挿入したいと思います。 JDBCは、生成されたキーを取得するとバッチアップデートで動作することを保証しません。
It is implementation-defined as to whether getGeneratedKeys will return
generated values after invoking the executeBatch method.
(JDBC 4.0仕様2006、p。135)。
2つの選択肢があります。すべての行を個別に挿入してキーを取得するか、バッチ挿入を実行してからキーをクエリします。
複数のキーを照会するための往復を避けるために、このアプローチを使用できます ここ. 。異なるサイズの5つの準備されたステートメントをEGに持っています。そして、私の「バッチクエリ」を可能な限り小さなステートメントに分割します。
より速い方法は何ですか?
解決
場合によります。
数字がないかどうか executeBatch()
実際には、使用するよりも高速です PreparedStatement
繰り返し、私の提案はこれです:
かどうかを試してください
getGeneratedKeys()
JDBCドライバーのために機能します。うまくいかない場合、バッチ付きインサートはとにかく機能しません。両方のテストケースを作成し、パフォーマンスを測定します。これにより、あなたの決定に基づいて実際のデータが得られます。他のすべては単なる推測です(そして間違って90%の時間)。
編集 アプリDB Agnosticを維持する場合は、テストをアプリに追加して、TEMP/テストテーブルで実行します。テストが成功した場合、バッチ更新を使用する実装を選択し、それ以外の場合はブルートフォースに戻ります。