Szukaj…


Wprowadzenie

Grupowanie instrukcji polega na wykonywaniu wielu instrukcji jako jednej jednostki (z normalnym java.sql.Statement ) lub pojedynczej instrukcji z wieloma zestawami wartości parametrów (z java.sql.PreparedStatement ).

Uwagi

Grupowanie instrukcji pozwala programowi zbierać powiązane instrukcje lub, w przypadku przygotowanych instrukcji, zestawy wartości parametrów i wysyłać je do serwera bazy danych jako pojedyncze wykonanie.

Korzyści z grupowania zestawień mogą obejmować lepszą wydajność. To, czy i w jaki sposób osiąga się te korzyści, zależy od sterownika i obsługi bazy danych, ale obejmują one:

  • Wysyłanie wszystkich instrukcji (lub wszystkich zestawów wartości) w jednym poleceniu
  • Przepisywanie instrukcji, aby można je było wykonać jak jedną dużą instrukcję

Wstawianie partii za pomocą PreparedStatement

Wykonywanie wsadowe przy użyciu java.sql.PreparedStatement umożliwia wykonanie pojedynczej instrukcji DML z wieloma zestawami wartości dla jej parametrów.

Ten przykład pokazuje, jak przygotować instrukcję insert i użyć jej do wstawienia wielu wierszy we wsadzie.

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 

Wykonanie wsadowe za pomocą instrukcji

Wykonanie wsadowe przy użyciu java.sql.Statement umożliwia wykonanie wielu instrukcji DML ( update , insert , delete ) jednocześnie. Osiąga się to poprzez utworzenie pojedynczego obiektu instrukcji, dodanie instrukcji do wykonania, a następnie wykonanie partii jako jednej.

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 

Uwaga:

statement.executeBatch(); zwróci int[] do przechowywania zwróconych wartości, możesz wykonać swoją partię w następujący sposób:

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


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow