Suche…


Einführung

Beim Anweisungsbatching werden entweder mehrere Anweisungen als eine Einheit (mit einem normalen java.sql.Statement ) oder eine einzelne Anweisung mit mehreren Parametersätzen (mit einem java.sql.PreparedStatement ) ausgeführt.

Bemerkungen

Das Anweisungsbatching ermöglicht einem Programm, zusammengehörige Anweisungen zu sammeln, oder bei vorbereiteten Anweisungen, Parameterwertesätze, und diese als eine einzige Ausführung an den Datenbankserver zu senden.

Die Vorteile des Anweisungsstapelns können eine verbesserte Leistung umfassen. Ob und wie diese Leistungsvorteile erzielt werden, hängt von der Treiber- und Datenbankunterstützung ab. Dazu gehören:

  • Senden Sie alle Anweisungen (oder alle Wertesätze) in einem Befehl
  • Die Anweisung (en) umschreiben, damit sie wie eine große Anweisung ausgeführt werden können

Stapeleinfügung mit PreparedStatement

Die Stapelverarbeitung mit java.sql.PreparedStatement ermöglicht Ihnen die Ausführung einer einzelnen DML-Anweisung mit mehreren java.sql.PreparedStatement für ihre Parameter.

In diesem Beispiel wird veranschaulicht, wie eine Einfügeanweisung vorbereitet und zum Einfügen mehrerer Zeilen in einen Stapel verwendet wird.

Connection connection = ...; // obtained earlier
connection.setAutoCommit(false); // disabling autoCommit is recommend for batching
int orderId = ...; // The primary key of inserting and order
List<OrderItem> orderItems = ...; // Order item data

try (PreparedStatement insert = connection.prepareStatement(
        "INSERT INTO orderlines(orderid, itemid, quantity) VALUES (?, ?, ?)")) {
    // Add the order item data to the batch
    for (OrderItem orderItem : orderItems) {
        insert.setInt(1, orderId);
        insert.setInt(2, orderItem.getItemId());
        insert.setInt(3, orderItem.getQuantity());
        insert.addBatch();
    }

    insert.executeBatch();//executing the batch 
}

connection.commit();//commit statements to apply changes 

Stapelverarbeitung mit Statement

Die Stapelverarbeitung mit java.sql.Statement ermöglicht das gleichzeitige Ausführen mehrerer DML-Anweisungen ( update , insert , delete ). Dies wird erreicht, indem ein einzelnes Anweisungsobjekt erstellt, die auszuführenden Anweisungen hinzugefügt und der Stapel dann als eine ausgeführt wird.

Connection connection = ...; // obtained earlier
connection.setAutoCommit(false); // disabling autocommit is recommended for batch execution

try (Statement statement = connection.createStatement()) {
    statement.addBatch("INSERT INTO users (id, username) VALUES (2, 'anna')");
    statement.addBatch("INSERT INTO userrole(userid, rolename) VALUES (2, 'admin')");
    
    statement.executeBatch();//executing the batch 
}

connection.commit();//commit statements to apply changes 

Hinweis:

statement.executeBatch(); gibt int[] , um die zurückgegebenen Werte zu speichern. Sie können den Stapel so ausführen:

int[] stmExc = statement.executeBatch();//executing the batch 


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow