Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Para melhorar o desempenho quando ocorrem múltiplas atualizações numa base de dados SQL Server, o Microsoft JDBC Driver for SQL Server oferece a capacidade de submeter múltiplas atualizações como uma única unidade de trabalho, também referida como batch.
As classes SQLServerStatement, SQLServerPreparedStatement e SQLServerCallableStatement podem todas ser usadas para submeter atualizações em lote. O método addBatch é usado para adicionar um comando. O método clearBatch é usado para limpar a lista de comandos. O método executeBatch é usado para submeter todos os comandos para processamento. Somente instruções DDL (Data Definition Language) e DML (Data Manipulation Language) que retornam uma contagem de atualização simples podem ser executadas como parte de um lote.
O método executeBatch devolve um array de valores de int que correspondem à contagem de atualizações de cada comando. Se um dos comandos falhar, é lançado um BatchUpdateException, e deve usar o método getUpdateCounts da classe BatchUpdateException para recuperar o array de contagem de atualizações. Se um comando falhar, o driver continua a processar os comandos restantes. No entanto, se um comando tiver um erro de sintaxe, as instruções do lote falham.
Observação
Se não tiver de usar contagens de atualizações, pode primeiro emitir uma instrução SET NOCOUNT ON para o SQL Server. Isto irá reduzir o tráfego de rede e melhorar ainda mais o desempenho da sua aplicação.
Como exemplo, crie a seguinte tabela na base de dados de exemplo AdventureWorks2025:
CREATE TABLE TestTable
(Col1 int IDENTITY,
Col2 varchar(50),
Col3 int);
No exemplo seguinte, uma ligação aberta à base de dados de exemplo AdventureWorks2025 é passada para a função, o método addBatch é usado para criar as instruções a executar, e o método executeBatch é chamado para submeter o lote à base de dados.
public static void executeBatchUpdate(Connection con) {
try {
Statement stmt = con.createStatement();
stmt.addBatch("INSERT INTO TestTable (Col2, Col3) VALUES ('X', 100)");
stmt.addBatch("INSERT INTO TestTable (Col2, Col3) VALUES ('Y', 200)");
stmt.addBatch("INSERT INTO TestTable (Col2, Col3) VALUES ('Z', 300)");
int[] updateCounts = stmt.executeBatch();
stmt.close();
}
catch (Exception e) {
e.printStackTrace();
}
}