O jdbc-spec tem o seguinte a dizer sobre o código de retorno das atualizações em lote:
■ 0 ou superior — o comando foi processado com sucesso e o valor é uma contagem de atualizações que indica o número de linhas no banco de dados que foram afetadas pela execução do comandoCapítulo 14 Atualizações em lote 121
■ Statement.SUCCESS_NO_INFO — o comando foi processado com sucesso, mas o número de linhas afetadas é desconhecido
Statement.SUCCESS_NO_INFO é definido como sendo -2, então seu resultado diz que tudo funcionou bem, mas você não obterá informações sobre o número de colunas atualizadas.
A documentação do oráculo afirma:
•Para um lote de instruções preparado, não é possível saber o número de linhas afetadas no banco de dados por cada instrução individual no lote. Portanto, todos os elementos da matriz têm um valor de -2. De acordo com a especificação JDBC 2.0, um valor de -2 indica que a operação foi bem-sucedida, mas o número de linhas afetadas é desconhecido.
•Para um lote de instruções genéricas, a matriz contém as contagens de atualização reais, indicando o número de linhas afetadas por cada operação. As contagens de atualização reais podem ser fornecidas apenas no caso de instruções genéricas na implementação Oracle de lotes padrão.
•Para um lote de instruções que pode ser chamado, o servidor sempre retorna o valor 1 como a contagem de atualização, independentemente do número de linhas afetadas por cada operação.
Portanto, parece que se você precisar das contagens de atualização, não poderá usar
PreparedStatement
s, mas tem que voltar para a Statement
simples s.