Ricerca…


introduzione

Il batching delle istruzioni consiste nell'esecuzione di più istruzioni come un'unità (con un java.sql.Statement normale) o una singola istruzione con più set di valori di parametro (con un java.sql.PreparedStatement ).

Osservazioni

Il dosaggio delle istruzioni consente a un programma di raccogliere istruzioni correlate o, nel caso di istruzioni preparate, le serie di valori dei parametri e di inviarle al server di database come esecuzione singola.

I vantaggi del batching delle istruzioni possono includere prestazioni migliorate. Se e come questi benefici prestazionali vengono raggiunti dipende dal supporto del driver e del database, ma includono:

  • Invio di tutte le istruzioni (o di tutti i set di valori) in un comando
  • Riscrivere le dichiarazioni in modo che possano essere eseguite come una grande affermazione

Inserimento batch utilizzando PreparedStatement

L'esecuzione batch utilizzando java.sql.PreparedStatement consente di eseguire una singola istruzione DML con più set di valori per i suoi parametri.

Questo esempio mostra come preparare un'istruzione di inserimento e utilizzarla per inserire più righe in un batch.

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 

Esecuzione batch utilizzando Statement

L'esecuzione batch mediante java.sql.Statement consente di eseguire più istruzioni DML ( update , insert , delete ) contemporaneamente. Ciò si ottiene creando un singolo oggetto statement, aggiungendo le istruzioni da eseguire e quindi eseguendo il batch come uno.

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 

Nota:

statement.executeBatch(); restituirà int[] per contenere i valori restituiti, è possibile eseguire il batch in questo modo:

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


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow