質問

自動的にキーを生成するテーブルにたくさんの行を挿入したいと思います。 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 繰り返し、私の提案はこれです:

  1. かどうかを試してください getGeneratedKeys() JDBCドライバーのために機能します。うまくいかない場合、バッチ付きインサートはとにかく機能しません。

  2. 両方のテストケースを作成し、パフォーマンスを測定します。これにより、あなたの決定に基づいて実際のデータが得られます。他のすべては単なる推測です(そして間違って90%の時間)。

編集 アプリDB Agnosticを維持する場合は、テストをアプリに追加して、TEMP/テストテーブルで実行します。テストが成功した場合、バッチ更新を使用する実装を選択し、それ以外の場合はブルートフォースに戻ります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top