Problema com ResultSet

6 respostas
M

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.");
}

6 Respostas

Mantu

mas… qual é o problema?

M

Desculpe-me, eu cliquei em enviar sem ter descrito o problema, mas já editei e está acima do código.

thiago.correa

Javadoc:
next()
Moves the cursor down one row from its current position.

Ou seja, acredito que, não dá para você verificar se há um próximo registro. Eu vi uma vez uma maneira de fazer essa verificação!

Mantu

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?

M

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.

Valew!!!

T

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.

Criado 8 de janeiro de 2007
Ultima resposta 8 de jan. de 2007
Respostas 6
Participantes 4