Heim > Java > javaLernprogramm > 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
Freigeben: 2024-10-31 22:42:02
Original
402 Leute haben es durchsucht

 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();
}
Nach dem Login kopieren

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();
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage