Wiederverwendung eines PreparedStatement für mehrere Vorgänge
In Szenarien, in denen eine einzelne Verbindung ohne Verbindungspool verwendet wird, stellt sich die Frage nach der Vorgehensweise Erstellen und Verwenden von PreparedStatements. Eine Möglichkeit besteht darin, für jede SQL/DML-Operation eine neue PreparedStatement-Instanz zu erstellen:
<code class="java">for (int i=0; i<1000; i++) { PreparedStatement preparedStatement = connection.prepareStatement(sql); preparedStatement.setObject(1, someValue); preparedStatement.executeQuery(); preparedStatement.close(); }
Alternativ kann dieselbe PreparedStatement-Instanz wiederverwendet werden, indem ihre Parameter gelöscht und Werte neu festgelegt werden:
<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();
Empfehlung und Multithread-Überlegungen
Für eine optimale Effizienz sollten Sie die stapelweise Ausführung von PreparedStatement-Vorgängen in Betracht ziehen:
<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>
Beim Arbeiten mit Multithread-Umgebungen ist es wichtig, Folgendes zu erwerben und Schließen Sie Verbindungen und Anweisungen innerhalb eines möglichst kurzen Umfangs innerhalb desselben Methodenblocks. Wenn Sie der JDBC-Sprache mit „try-with-resources“ folgen, stellen Sie sicher, dass die Ressourcenverwaltung angemessen gehandhabt wird.
Deaktivieren Sie bei Transaktionsstapeln die automatische Festschreibung für die Verbindung und schreiben Sie erst fest, nachdem alle Stapel erfolgreich abgeschlossen wurden, um potenzielle Datenbankinkonsistenzen zu vermeiden.
Das obige ist der detaillierte Inhalt vonSoll ich für jede SQL-Operation neue PreparedStatements erstellen oder dasselbe wiederverwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!