Recuperar ResultSet usando CallableStatement após executeBatch ()

Eu preciso chamar o procedimento armazenado várias vezes e usar executeBatch() para isso. Cada chamada deve retornar a tabela com resultados, mas não consegui acessar esses resultados. O próximo código funciona bem:

 callableStatement.setString(1, "foo"); callableStatement.setString(2, "bar"); callableStatement.execute(); resultSet = callableStatement.getResultSet(); 

Mas o próximo código não funciona como esperado:

 for (String str : strings) { callableStatement.setString(1, str); callableStatement.setString(2, "bar"); callableStatement.addBatch(); } callableStatement.executeBatch(); resultSet = callableStatement.getResultSet(); // returns null 

Eu já tentei chamar callableStatement.getUpdateCount() e callableStatement.getMoreResults() antes de extrair ResultSet, mas sem sucesso.

Este não é realmente o uso correto de #executeBatch . Os methods em lote são para manipular dados, e não para obter dados de resultados. Ou seja, você pode fazer inserções / atualizações / exclusões em lote, mas não leituras. O resultado de #executeBatch é a contagem de atualizações, indicando quantas alterações foram feitas por operação em lote

A intenção é que você possa melhorar o desempenho aliviando a sobrecarga de rede e a viagem de ida e volta ao database para operações de manipulação de dados semelhantes.

Normalmente, você não executa consultas no lote porque consultas diferentes resultariam em ResultSet s com formas diferentes (a menos que fossem todas para a mesma tabela com as mesmas colunas, mas com uma consulta diferente [mas por que não apenas modificar sua consulta]).