Bom dia a todos do forum. Tenho uma dúvida com relação ao retorno do método next() da interface ResultSet, estou fazendo um teste de cadastro de cliente e para efeito de negócio, como se trata de um teste, decidi que não podem haver dois clientes com o mesmo nome, então criei os métodos abaixo:
public static boolean isJaGravadoNoBD(ClienteDTO clienteDTO) throws SQLException, PersistenciaException{
String query = "SELECT * FROM petshop.cliente WHERE nome = " + "'" + clienteDTO.getNome() + "'";
ResultSet rs = ConexaoUtil.consultar(query);
//System.out.println(rs.wasNull());
try {
if(rs != null && rs.next()){
return true;//rs.first();//Desta maneira não funcionou
}
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
public static ResultSet consultar(String query){
try {
Connection con = ConexaoUtil.getInstance().getConnection();
PreparedStatement pstm = con.prepareStatement(query);
ResultSet rs = pstm.executeQuery();
if(rs.next()){
return rs;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
A Primeira versão do método isJaGravadoNoBD não funcionou, pois permitia que eu gravasse os dados mesmo que já houvesse um cliente com o mesmo nome,então dei uma olhada na documentação e fiz a segunda versão, esta funcionou, mas confesso que não entendi:
public static boolean isJaGravadoNoBD(ClienteDTO clienteDTO) throws SQLException, PersistenciaException{
String query = "SELECT * FROM petshop.cliente WHERE nome = " + "'" + clienteDTO.getNome() + "'";
ResultSet rs = ConexaoUtil.consultar(query);
//System.out.println(rs.wasNull());
try {
if(rs != null && !rs.next()){
return rs.first();
}
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
Minha dúvida é: Por que a primeira versão não funcionou, tem algo a ver com a posição do cursor na hora da primeira consulta? Porque debugando, mesmo com a query preenchida, ele estava retornando false. Se puderem me ajudar com essa dúvida eu agradeço. Abraço a todos.