重複使用一個PreparedStatement進行多個操作
在沒有連接池的情況下使用單一連接的情況下,有一個關於如何處理的問題建立和使用PreparedStatements。一個選擇是為每個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>
在多執行緒環境中工作時,取得和在同一方法區塊內盡可能短的範圍內關閉連接和語句。遵循 JDBC 習慣用法,使用 try-with-resources 確保資源管理得到適當處理。
對於事務批次處理,請在連線上停用自動提交,並僅在所有批次成功完成後才提交,以避免潛在的資料庫不一致。
以上是我應該為每個 SQL 操作建立新的PreparedStatements 還是重複使用相同的語句?的詳細內容。更多資訊請關注PHP中文網其他相關文章!