Pessoal, na linha if(rs2.next()){ ele lança uma excessão “Conjunto de Resultados Esgotado”, mas ele não teria q entrar no else else{ usuario.setMensagem(“Entidade não cadastrada.”);} ???
if ( rs.next() ) {
//se está liberado o acesso web para o usuário
if(rs.getString(2).equals("1")){
//se tem senha oracle
if (rs.getString(3).equals("1")){
String url = PropertiesLoaderImpl.getValor("url");
conectou = DriverManager.getConnection(url,usuario.getUsuario(),usuario.getSenha());
if(conectou != null){
sql2 = con.prepareStatement
("SELECT codigo_representante " +
" FROM representante " +
" WHERE id_entidade = ?");
sql2.setString(1, rs.getString(6)); System.out.println("Entidade = "+rs.getString(6));
rs2 = sql2.executeQuery();
if(rs2.next()){
System.out.println("rs2 = "+rs2);
usuario.setLogado("ok");
usuario.setId_representante(rs2.getString(1));
}else{
usuario.setMensagem("Entidade não cadastrada.");
}
System.out.println("Representante = "+rs2.getString(1));
rs2.close();
sql2.close();
conectou.close();
}else{
usuario.setMensagem("Usuário ou senha não confere.");
}
else{
usuario.setMensagem("Usuário ou senha não confere.");
}
Bom, pela documentação da classe ResultSet, o método next pode lançar apenas uma SQLException. A julgar pela mensagem da exceção lançada, O seu código deve estar capturando exceções e "mascarando-as com alguma outra exceção (cuja mensagem é “Conjunto de Resultados Esgotados”). Se, de fato, é a invocação do next que está lançando a exceção, essa exceção só pode ser uma SQLException. Seria interessante então você dar um jeito de “desmascarar” a SQL Exception, pois ela provavelmente vai trazer alguma mensagem do BD explicando o que deu de errado, ou então vai trazer uma mensagem dizendo que seu ResultSet estava “closed” quando tentou invocar o next.
Teria como você isso para nós?
Valew pessoal, realmente era uma SQLException, pois a instrução System.out.println("Representante = "+rs2.getString(1)); estava fora do IF, coloquei dentro do IF e funcionou.
Em vez de usar os números dos campos, use os nomes. (ex: "
sql2.setString(“id_entidade”, …)
A diferença de desempenho entre usar os números e usar os nomes é normalmente desprezível (é claro que depende um pouco da qualidade de implementação do driver), e o programa fica muito mais inteligível. Além disso você se protege contra alterações na sua query SQL.