Ao executar um procedimento armazenado, ele pode retornar vários objetos ResultSet e/ou contagens de atualização se fizer várias instruções.
Você usa
CallableStatement para executar o proc e então getResultSet() ou getUpdateCount() para obter o resultado certo. Para vários conjuntos/instruções de resultados, você chama getMoreResults() para percorrer os resultados do proc armazenado. Para um caso simples como este, você só precisa chamar
getResultSet() uma vez e processá-lo.