Heim  >  Artikel  >  Java  >  Soll ich für jede SQL-Operation neue PreparedStatements erstellen oder dasselbe wiederverwenden?

Soll ich für jede SQL-Operation neue PreparedStatements erstellen oder dasselbe wiederverwenden?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-31 22:42:02305Durchsuche

 Should I create new PreparedStatements for each SQL operation or reuse the same one?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn