JDBC - Processamento em lote

O processamento em lote permite agrupar instruções SQL relacionadas em um lote e enviá-las com uma chamada para o banco de dados.

Ao enviar várias instruções SQL para o banco de dados de uma vez, você reduz a sobrecarga de comunicação, melhorando assim o desempenho.

  • Os drivers JDBC não são necessários para suportar esse recurso. Você deve usar o método DatabaseMetaData.supportsBatchUpdates () para determinar se o banco de dados de destino oferece suporte ao processamento de atualização em lote. O método retorna true se seu driver JDBC suportar este recurso.

  • o addBatch()o método de Statement, PreparedStatement e CallableStatement é usado para adicionar instruções individuais ao lote. oexecuteBatch() é usado para iniciar a execução de todas as instruções agrupadas.

  • o executeBatch() retorna uma matriz de inteiros e cada elemento da matriz representa a contagem de atualização para a respectiva instrução de atualização.

  • Assim como você pode adicionar instruções a um lote para processamento, você pode removê-las com o clearBatch()método. Este método remove todas as instruções que você adicionou com o método addBatch (). No entanto, você não pode escolher seletivamente qual declaração remover.

Lote com objeto de declaração

Aqui está uma sequência típica de etapas para usar o processamento em lote com objeto de declaração -

  • Crie um objeto Statement usando os métodos createStatement () .

  • Defina a confirmação automática como false usando setAutoCommit () .

  • Adicione quantas instruções SQL desejar em lote usando o método addBatch () no objeto de instrução criado.

  • Execute todas as instruções SQL usando o método executeBatch () no objeto de instrução criado.

  • Finalmente, comprometa todas as mudanças usando o método commit () .

Exemplo

O trecho de código a seguir fornece um exemplo de atualização em lote usando o objeto Statement -

// Create statement object
Statement stmt = conn.createStatement();

// Set auto-commit to false
conn.setAutoCommit(false);

// Create SQL statement
String SQL = "INSERT INTO Employees (id, first, last, age) " +
             "VALUES(200,'Zia', 'Ali', 30)";
// Add above SQL statement in the batch.
stmt.addBatch(SQL);

// Create one more SQL statement
String SQL = "INSERT INTO Employees (id, first, last, age) " +
             "VALUES(201,'Raj', 'Kumar', 35)";
// Add above SQL statement in the batch.
stmt.addBatch(SQL);

// Create one more SQL statement
String SQL = "UPDATE Employees SET age = 35 " +
             "WHERE id = 100";
// Add above SQL statement in the batch.
stmt.addBatch(SQL);

// Create an int[] to hold returned values
int[] count = stmt.executeBatch();

//Explicitly commit statements to apply changes
conn.commit();

Para uma melhor compreensão, vamos estudar o Batching - Exemplo de código .

Lote com objeto PrepareStatement

Aqui está uma sequência típica de etapas para usar o processamento em lote com o objeto PrepareStatement -

  1. Crie instruções SQL com espaços reservados.

  2. Crie o objeto PrepareStatement usando os métodos prepareStatement () .

  3. Defina a confirmação automática como false usando setAutoCommit () .

  4. Adicione quantas instruções SQL desejar em lote usando o método addBatch () no objeto de instrução criado.

  5. Execute todas as instruções SQL usando o método executeBatch () no objeto de instrução criado.

  6. Finalmente, comprometa todas as mudanças usando o método commit () .

O seguinte snippet de código fornece um exemplo de atualização em lote usando o objeto PrepareStatement -

// Create SQL statement
String SQL = "INSERT INTO Employees (id, first, last, age) " +
             "VALUES(?, ?, ?, ?)";

// Create PrepareStatement object
PreparedStatemen pstmt = conn.prepareStatement(SQL);

//Set auto-commit to false
conn.setAutoCommit(false);

// Set the variables
pstmt.setInt( 1, 400 );
pstmt.setString( 2, "Pappu" );
pstmt.setString( 3, "Singh" );
pstmt.setInt( 4, 33 );
// Add it to the batch
pstmt.addBatch();

// Set the variables
pstmt.setInt( 1, 401 );
pstmt.setString( 2, "Pawan" );
pstmt.setString( 3, "Singh" );
pstmt.setInt( 4, 31 );
// Add it to the batch
pstmt.addBatch();

//add more batches
.
.
.
.
//Create an int[] to hold returned values
int[] count = stmt.executeBatch();

//Explicitly commit statements to apply changes
conn.commit();

Para uma melhor compreensão, vamos estudar o Batching - Exemplo de código .