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 -
Crie instruções SQL com espaços reservados.
Crie o objeto PrepareStatement usando os métodos prepareStatement () .
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 () .
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 .