複数の操作で PreparedStatement を再利用する
接続プールなしで単一の接続が使用されるシナリオでは、 PreparedStatement の作成と使用。 1 つのオプションは、SQL/DML 操作ごとに新しい PreparedStatement インスタンスを作成することです:
<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 操作をバッチで実行することを検討してください。
<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>
マルチスレッド環境で作業する場合、取得および同じメソッド ブロック内の可能な限り短いスコープ内で接続とステートメントを閉じます。 try-with-resources を使用した JDBC イディオムに従うことで、リソース管理が適切に処理されることが保証されます。
トランザクション バッチの場合は、接続での自動コミットを無効にし、データベースの不整合の可能性を避けるために、すべてのバッチが正常に完了した後にのみコミットしてください。
以上がSQL 操作ごとに新しい PreparedStatement を作成する必要がありますか、それとも同じものを再利用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。