English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Processamento em lote JDBC (Batch)

O processamento em lote permite que você agrupe语句相关的SQL em um lote e os submeta em uma chamada única para o banco de dados.

ao enviar várias sentenças SQL para o banco de dados de uma vez, você pode reduzir o overhead de comunicação, aumentando assim o desempenho.

  • O driver JDBC não precisa suportar essa característica. Você deve usar o método DatabaseMetaData.supportsBatchUpdates () para determinar se o banco de dados alvo suporta o processamento de atualizações em lote. Se o driver JDBC suportar essa característica, o método retorna true.

  • Os métodos addBatch () dos objetos Statement, PreparedStatement e CallableStatement são usados para adicionar uma única sentença ao lote. executeBatch () é usado para começar a executar todos os statements combinados.

  • executeBatch() retorna um array de inteiros, onde cada elemento representa a contagem de atualizações correspondente à sentença update.

  • da mesma forma que você pode adicionar sentenças ao lote para processamento, você também pode usá-las para excluir com o método clearBatch () . Este método remove todas as sentenças que foram adicionadas com o método addBatch () . No entanto, não é possível escolher as sentenças a serem excluídas.

usar objetos de sentença para lotes

esta é a sequência típica de passos para usar lotes com objetos Statement-

  • usar esses doiscreateStatement()método para criar objetos Statement.

  • usar setAutoCommit () para definir auto-commit definido como false.

  • usar o método addBatch() no objeto de sentença criado para adicionar qualquer quantidade de sentenças SQL ao lote.

  • executar todos os SQL statements usando o método executeBatch() do objeto de sentença criado.

  • Finalmente, usandocommit()Método para submeter todas as alterações.

instância

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

// criar objeto de sentença
Statement stmt = conn.createStatement();
// Definindo o commit automático como false
conn.setAutoCommit(false);
// Criando sentença SQL
String SQL = "INSERT INTO Employees (id, first, last, age) "; +
             "VALUES(200, 'Zia', 'Ali', 30)";
// adicionar a sentença SQL superior ao lote.
stmt.addBatch(SQL);
// criar outra sentença SQL
String SQL = "INSERT INTO Employees (id, first, last, age) "; +
             "VALUES(201,'Raj', 'Kumar', 35)";
// adicionar a sentença SQL superior ao lote.
stmt.addBatch(SQL);
// criar outra sentença SQL
String SQL = "UPDATE Employees SET age = 35 " +
             "WHERE id = 100";
// adicionar a sentença SQL superior ao lote.
stmt.addBatch(SQL);
// Criando um int[] para armazenar os valores retornados
int[] count = stmt.executeBatch();
//Submetendo claramente a sentença para aplicar as alterações
conn.commit();

Para entender melhor, vamos estudarCódigo de Exemplo de Batch Processamento.

usar objetos PrepareStatement para lotes

esta é a sequência típica de passos para usar lotes com objetos PrepareStatement-

  1. criar uma sentença SQL usando placeholders.

  2. usar qualquer método PrepareStatement() para criar um objeto PrepareStatement.

  3. usar setAutoCommit () para definir auto-commit definido como false.

  4. Adicionar o máximo possível de SQL statements ao lote usando o método addBatch() do objeto de sentença criado.

  5. executar todos os SQL statements usando o método executeBatch() do objeto de sentença criado.

  6. Finalmente, usandocommit()Método para submeter todas as alterações.

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

// Criando sentença SQL
String SQL = "INSERT INTO Employees (id, first, last, age) "; +
             "VALUES(?, ?, ?, ?)";
// Criando objeto PreparedStatemen
PreparedStatemen pstmt = conn.prepareStatement(SQL);
//Definindo o commit automático como false
conn.setAutoCommit(false);
// Definir variáveis
pstmt.setInt( 1, 400);
pstmt.setString( 2, "Pappu");
pstmt.setString( 3, "Singh");
pstmt.setInt( 4, 33 );
// Adicionando ao lote
pstmt.addBatch();
// Definir variáveis
pstmt.setInt( 1, 401 );
pstmt.setString( 2, "Pawan");
pstmt.setString( 3, "Singh");
pstmt.setInt( 4, 31 );
// Adicionando ao lote
pstmt.addBatch();
//Adicionar mais batches
.
.
.
.
//Criando um int[] para armazenar os valores retornados
int[] count = stmt.executeBatch();
//Submetendo claramente a sentença para aplicar as alterações
conn.commit();

Para entender melhor, vamos estudarCódigo de Exemplo de Batch Processamento.