Minha dúvida é sobre uma verificação que eu costumo realizar e gostaria de saber se estou perdendo o meu tempo fazendo isso ou não…
Costumo validar atualizações em batch, percorrendo o array de inteiros que os objetos PreparedStatement retornam ao executar processos em batch pelo método executeBatch().
Como estou usando o ORACLE, sei que se algum dos inteiros do array for diferente de -2, significa que não foi realizada a atualização daquela instrução com sucesso.
Então disparo uma exceção ou finalizo o método retornando um valor que indica que a atualização não ocorreu com sucesso (geralmente um valor boolean).
Fiz um método hipótetico resumido abaixo:
private boolean atualizarLojaCadastroCliente ( Loja novaLoja, Loja lojaAntiga, List <Cliente> clientes )
throws SQLException
{
//início do método omitido
//instanciação do objeto conexao
// ...
PreparedStatement ps = conexao.prepareStatement ("UPDATE CADASTRO.CLIENTE SET CODLOJA = ? WHERE CODLOJA = ? AND CODCLIENTE = ?");
for (Cliente cli : clientes) {
ps.setInt (1, novaLoja.getCodigo());
ps.setInt (2, lojaAntiga.getCodigo());
ps.setInt (3, cli.getCodigoCliente());
ps.addBatch();
}
int statusBatch[] = ps.executeBatch();
//** Minha dúvida são nos trechos abaixo:
//É necessário mesmo eu fazer essa validação???
for (int iStatus : statusBatch) {
if ( iStatus != -2 )
{
conexao.rollback();
return false;
}
}
//**
conexao.commit();
ps.close();
ps = null;
return true;
//Estou omitindo neste exemplo todo o tratamento de erros e blocos try..catch..finally
} //final do método
Gostaria de saber se é necessário percorrer o vetor statusBatch somente para validar as instruções que submeti?
Sempre que uma consulta SQL não é executada corretamente, é disparado um SQLException, para qualquer BD. Então, posso me basear somente se disparar uma exceção para indicar que as instruções não foram executadas corretamente?
[color=red]Estou fazendo essa validação a toa??[/color]
for (int iStatus : statusBatch) {
if ( iStatus != -2 )
{
conexao.rollback();
return false;
}
}