JDBC では、PreparedStatement を使用して、異なるパラメーターで SQL ステートメントを複数回実行できます。 PreparedStatement を再利用するには、2 つの一般的なアプローチがあります。
<code class="java">for (int i = 0; i < 1000; i++) { PreparedStatement preparedStatement = connection.prepareStatement(sql); preparedStatement.setObject(1, someValue); preparedStatement.executeQuery(); preparedStatement.close(); }
このアプローチでは、実行のたびに準備されたステートメントの機能を維持しながら、孤立している。ただし、実行のたびに新しい PreparedStatement オブジェクトを作成して閉じる必要があり、非効率的になる可能性があります。
<code class="java">PreparedStatement preparedStatement = connection.prepareStatement(sql); for (int i = 0; i < 1000; i++) { preparedStatement.clearParameters(); preparedStatement.setObject(1, someValue); preparedStatement.executeQuery(); } preparedStatement.close();
このアプローチは、次の理由により効率的です。同じ PreparedStatement オブジェクトを再利用するため、ステートメントを複数回作成して閉じるオーバーヘッドが回避されます。ただし、各実行前にパラメータを手動でクリアする必要があります。
マルチスレッド環境で準備されたステートメントを使用する場合、スレッド セーフを処理することが重要です。競合状態やデータ破損を回避するには、接続とスレッド固有のリソースを管理する接続プールを使用することをお勧めします。
一括操作の場合、複数の SQL ステートメントをバッチとして実行します。非常に効率的です。各ステートメントを個別に実行する代わりに、単一のバッチとして実行できます。
<code class="java">public void executeBatch(List<Entity> entities) throws SQLException { try ( Connection connection = dataSource.getConnection(); PreparedStatement statement = connection.prepareStatement(SQL); ) { for (Entity entity : entities) { statement.setObject(1, entity.getSomeProperty()); statement.addBatch(); } statement.executeBatch(); } }</code>
バッチ処理により、複数の SQL ステートメントの作成と実行のオーバーヘッドが大幅に削減され、パフォーマンスの向上につながります。
以上がJDBC で PreparedStatement を効率的に再利用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。