Pessoal,
No meu PreparedStatement, pra ser mais preciso após o executeQuery dou um first() para o ponteiro ir no 1º registro, mas o estranho que está dando um erro muito estranho:
The requested operation is not supported on forward only result sets.
O meu código é o seguinte:
[code]String sql = "SELECT codlistfuncao,codceninf,codfuncao "+
"FROM rellistfuncao "+
“WHERE codceninf = ?;”;
try {
java.sql.PreparedStatement ps = conecta.getPreparedStatement(sql);
ps.setInt (1, centinf.getCodceninf());
ResultSet resultado = ps.executeQuery();
resultado.first();
} catch (ClassNotFoundException e) {
retorno = false;
e.printStackTrace();
}finally{
conecta.desconectar();
}
[/code]
Alguém sabe pq ??
Obrigado
Apenas como palpite,
sua instrução SQL está levando um “;” no final e isso pode causar um erro no momento da execução não
obtendo assim um Set de resultados e ao tentar o first ele não tem o que apontar!
Tente retirar esse ; e poste o resultado.
Valeu
Tentei e deu o mesmo erro.
Alguma outra ideia ?
Obrigado
Depois que você executa a consulta, o preparedStatement já está posicionado antes do primeiro registro.
Portanto, ao invés de first() você deve chamar next() para posiciona-lo no primeiro registro. next() retorna true se foi possível andar sobre o statement, ou false, caso tenha sido impossível (ou seja, se não havia um registro na próxima posição).
O comando first() só existe em PreparedStatements que sejam navegáveis para frente e para trás. Normalmente, não é necessário criar esse tipo de cursor no banco, pois só lemos os dados do primeiro até o último. Caso isso seja realmente necessário, você tem que criar o PreparedStatement assim:
conn.preparedStatement(sql, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
Realmente, era isso mesmo…
O meu código ficou assim:
public PreparedStatement getPreparedStatement(String SQL) throws SQLException, ClassNotFoundException {
PreparedStatement ps = getConexao().prepareStatement(SQL,ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
ps.setMaxRows(100);
return ps;
}
Obrigado
Verifique com muito carinho se não é melhor continuar usando um PreparedStatement que não seja scrollable. Geralmente ele é desnecessário. Além de consumir muito mais recursos do banco, esse tipo de statement é consideravelmente mais lento. Sem falar que alguns BDs podem não suporta-lo.