Erro Classe DAO

3 respostas
V

Boa noite a todos,

Alguém poderia me ajudar a ver o que está errado na classe abaixo?

O erro:

java.lang.RuntimeException: org.firebirdsql.jdbc.FBSQLException: The result set is closed

br.com.dataquery.dao.UsuarioDAO.existeUsuario(UsuarioDAO.java:50)

br.com.dataquery.action.LoginAction.login(LoginAction.java:22)

A Classe:

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import br.com.dataquery.conexao.ConnectionFactory;
import br.com.dataquery.modelo.Usuario;

public class UsuarioDAO
{

Connection conn;

public UsuarioDAO() throws SQLException{
	new ConnectionFactory();
	this.conn = ConnectionFactory.getConnection();
}

public boolean existeUsuario(Usuario usuario){
	
	String sql = "select * from usuarios where usuario= ?  and senha= ?";
	
	try{
	PreparedStatement stmt = this.conn.prepareStatement(sql);
	
	stmt.setString(1, usuario.getUsuario());
	stmt.setString(2, usuario.getSenha());
	
	ResultSet rs = stmt.executeQuery();
	
	stmt.execute();
	
	//verifica se existe retorno na consulta
	if(rs.next())
	{
		stmt.close();
		return true;
	}
	else
	{
		stmt.close();
		return false;
	}
	
}
	catch(SQLException e)
	{
	throw new RuntimeException(e);
}

}
}

Obrigado!

3 Respostas

mausexdd

Use a Tag Code plx

import java.sql.Connection; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.sql.SQLException; 

import br.com.dataquery.conexao.ConnectionFactory; 
import br.com.dataquery.modelo.Usuario; 

public class UsuarioDAO 
{ 

Connection conn; 

public UsuarioDAO() throws SQLException{ 
new ConnectionFactory(); 
this.conn = ConnectionFactory.getConnection(); 
} 

public boolean existeUsuario(Usuario usuario){ 

String sql = "select * from usuarios where usuario= ? and senha= ?"; 

try{ 
PreparedStatement stmt = this.conn.prepareStatement(sql); 

stmt.setString(1, usuario.getUsuario()); 
stmt.setString(2, usuario.getSenha()); 

ResultSet rs = stmt.executeQuery(); 

stmt.execute(); 

//verifica se existe retorno na consulta 
if(rs.next()) 
{ 
stmt.close(); 
return true; 
} 
else 
{ 
stmt.close(); 
return false; 
} 

} 
catch(SQLException e) 
{ 
throw new RuntimeException(e); 
} 
} 
}
CrazyFrogJava

Vasconcellos

Isso acontece por que você não pode reaproveitar o Statement. Note que vc tentou executar duas vezes a mesma.

stmt.executeQuery();   

stmt.execute();

Me corrijam se estiver errado

[]

V

Olá CrazyFrogJava,

Esta classe faz parte de um exercicio de “Login da Aplicação” que peguei da apostila da Caelum e fiz a adaptação para minha aplicação.
Realmente se eu retirar o stmt.execute(); o erro não ocorre… mas também não sai da página jsp anterior, que é onde pede login e senha.

Se eu retirar o stmt.execute(), a impressão que dá é que o if(rs.next()) não executa… ou a execução se perde silenciosamente, sei lá. Foi aí que me perdi.

Criado 23 de maio de 2011
Ultima resposta 23 de mai. de 2011
Respostas 3
Participantes 3