0

java.sql準備済みステートメントのバッチ実行を介して複数のテーブル (最大 20) を作成しようとしています。ほとんどのテーブルは相互に関連しています。しかし、私の心にはいくつかの混乱があります。

1) 接続の自動コミットを true または false に設定しますか? 2) BatchExecute の特別なパターンはありますか? アップダウンのように。親テーブルを作成するには、クエリを最初に実行する必要があります。3) エラーが発生した場合、すべてのバッチがロールバックされますか?

4

2 に答える 2

0

この場合、実際にバッチ実行を使用してもあまり意味がありません。バッチ実行を使用すると、数千行を一度に挿入または更新するときに (大幅に) パフォーマンスが向上します。トランザクション内にすべてのステートメントを含める必要があります。

  1. Connection.setAutoCommit(false) を呼び出す
  2. Statement.executeUpdate を使用して create-table ステートメントを実行します
  3. Connection.commit() を呼び出す

それらの間の外部キーに基づいて、create-table ステートメントを自分で注文する必要があります。Mark が指摘したように、使用している DB は各 create-table をすぐにコミットし、トランザクションを無視する可能性があります。すべての DB がテーブルのトランザクション作成をサポートしているわけではありません。これをテストするか、この側面に関してさらに調査を行う必要があります。

于 2013-01-11T09:05:56.503 に答える
0

自動コミットをオンにしたバッチ実行の動作は実装で定義されており、一部のドライバーはそれをサポートしていない場合もあります。したがって、バッチ実行を使用する場合は、auto commit を false に設定します。

とはいえ、一部のデータベースは暗黙的に各 DDL ステートメントをコミットします。これにより、バッチ実行の正しい動作が妨げられる可能性があります。安全なルートを取り、DDL のバッチ実行を使用するのではなく、通常の DDL の実行を使用することをお勧めしStatementますexecute(String)

于 2013-01-11T08:07:56.347 に答える