Heim >Datenbank >MySQL-Tutorial >Wie kann ich mit Javas PreparedStatement effizient mehrere Zeilen in MySQL einfügen?

Wie kann ich mit Javas PreparedStatement effizient mehrere Zeilen in MySQL einfügen?

Linda Hamilton
Linda HamiltonOriginal
2024-12-20 15:31:09466Durchsuche

How Can I Efficiently Insert Multiple Rows into MySQL Using Java's PreparedStatement?

Mehrere Zeilen mit PreparedStatement mithilfe von PreparedStatement in MySQL einfügen

In Java kann das effiziente Einfügen mehrerer Zeilen in eine MySQL-Tabelle mithilfe des Batches von PreparedStatement erreicht werden Verarbeitungsmöglichkeiten. Bisher war es üblich, für jede Zeile einzelne SQL-Anweisungen auszuführen:

for (String element : array) {
    myStatement.setString(1, element[0]);
    myStatement.setString(2, element[1]);

    myStatement.executeUpdate();
}

Um die Leistung zu optimieren, bietet MySQL jedoch eine Syntax, die das Einfügen mehrerer Zeilen auf einmal ermöglicht:

INSERT INTO table (col1, col2) VALUES ('val1', 'val2'), ('val1', 'val2')[, ...]

Die Verwendung dieses Ansatzes mit PreparedStatement erfordert eine Stapelverarbeitung:

  1. Erstellen Sie eine PreparedStatement: Bereiten Sie die SQL-Anweisung vor und legen Sie ihre Parameter für jede Zeile fest. Verwenden Sie addBatch(), um jede Anweisung an den Stapel anzuhängen.
  2. Führen Sie den Stapel aus: Sobald alle Zeilen hinzugefügt wurden, rufen SieexecuteBatch() auf, um den gesamten Stapel auszuführen. Diese Methode gibt ein Array von Aktualisierungszahlen zurück, das die Anzahl der Zeilen angibt, die von jeder Anweisung betroffen sind.

Hier ist ein Beispiel, das den Prozess veranschaulicht:

public void save(List<Entity> entities) throws SQLException {
    try (
        Connection connection = database.getConnection();
        PreparedStatement statement = connection.prepareStatement(SQL_INSERT);
    ) {
        int i = 0;

        for (Entity entity : entities) {
            statement.setString(1, entity.getSomeProperty());
            // ...

            statement.addBatch();
            i++;

            if (i % 1000 == 0 || i == entities.size()) {
                statement.executeBatch(); // Execute every 1000 items.
            }
        }
    }
}

Der Stapel wird alle 1000 Zeilen ausgeführt hilft dabei, potenzielle Einschränkungen der Stapelgröße durch JDBC-Treiber oder Datenbanken zu vermeiden.

Weitere Einzelheiten finden Sie im JDBC-Tutorial zur Verwendung von PreparedStatement- und Statement-Objekten für Batch-Updates.

Das obige ist der detaillierte Inhalt vonWie kann ich mit Javas PreparedStatement effizient mehrere Zeilen in MySQL einfügen?. 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