Problema com ResultSet

3 respostas
R

ola pessoal…

to com um probleminha aqui…
um ResultSet que da erro dizendo que esta fechado.

a classe de banco esta assim:

public ResultSet retornaResultSet(String query)
    {
        ResultSet rs = null;
        try
          {
            Connection conn = abrirConexao();
            Statement statement = conn.createStatement(
                    ResultSet.TYPE_SCROLL_INSENSITIVE,
                    ResultSet.CONCUR_READ_ONLY);
            rs = statement.executeQuery(query);
            fecharConexao();
          }
        catch (SQLException sqlex)
          {
            System.out.println("Erro na Consulta");
            rs = null;
          }
        return (rs);
    }

esta código esta dentro de uma classe de banco, na camada logica.
mas qdo vou fazer uso dela em outro ponto do código, faço um select qquer da erro dizendo que esse ResultSet que o método retorna esta fechado.

acredito que ele esta sendo fechado no momento que eu fecho a conexão, com o método fechaConexao(), ela fecha tudo implicitamente, incluindo meu ResultSet…

mas ai fica a pergunta, se eu não fechar a conexão, não vai dar problema conforme o sistema for sendo usado??
não vai ficar acumulando um monte de conexão???

3 Respostas

FacaNaCaveira

rbcneto:
ola pessoal…

to com um probleminha aqui…
um ResultSet que da erro dizendo que esta fechado.

a classe de banco esta assim:

public ResultSet retornaResultSet(String query)
    {
        ResultSet rs = null;
        try
          {
            Connection conn = abrirConexao();
            Statement statement = conn.createStatement(
                    ResultSet.TYPE_SCROLL_INSENSITIVE,
                    ResultSet.CONCUR_READ_ONLY);
            rs = statement.executeQuery(query);
            fecharConexao();
          }
        catch (SQLException sqlex)
          {
            System.out.println("Erro na Consulta");
            rs = null;
          }
        return (rs);
    }

esta código esta dentro de uma classe de banco, na camada logica.
mas qdo vou fazer uso dela em outro ponto do código, faço um select qquer da erro dizendo que esse ResultSet que o método retorna esta fechado.

acredito que ele esta sendo fechado no momento que eu fecho a conexão, com o método fechaConexao(), ela fecha tudo implicitamente, incluindo meu ResultSet…

mas ai fica a pergunta, se eu não fechar a conexão, não vai dar problema conforme o sistema for sendo usado??
não vai ficar acumulando um monte de conexão???

Fala ai rbcneto td blz??
teria como postar o codigo de abrirConexao() e fecharConexao()???
bem pela minha visao com esse codigo que vc esta, deveria tirar o fecharConexao() e chama-lo apos trabalhar com o RecordSet, para fins praticos seria chamar o fechar conexao do lado de fora desse seu metodo.
Caso vc comece a trabalhar com um pool de conexoes acredito que nao ira acumular tantas conexoes abertas.

R

eae FacaNaCaveira…
primeiramente, muito obrigado por tentar me ajudar…

vamos la, os metodos que vc pedio:

public Connection abrirConexao()
    {
        try
          {
            Class.forName(driver);
            connect = DriverManager.getConnection(url,usuario,senha);
          }
        catch (ClassNotFoundException cnfex)
          {
            System.err.println("Falha ao ler o driver JDBC - " + cnfex.getMessage() +
                               " - " + cnfex.toString() + " - " + cnfex.getLocalizedMessage());
          }
        catch (SQLException sqlex)
          {
            System.out.println("Impossível conectar com a base de dados - " + sqlex.getMessage() +
                               " - " + sqlex.toString() + " - " + sqlex.getLocalizedMessage());
          }
        catch (Exception ex)
          {
            System.out.println("Outro erro");
          }
        return (connect);
    }
public boolean fecharConexao()
      {
        try
          {
            connect.close();
            return true;
          }
        catch (SQLException ex)
          {
            System.out.println("Erro ao desconectar!\n" + ex.toString());
          }
        catch (NullPointerException e) 
          {
            System.out.println("Erro ao desconectar!\n" + e.toString());
          }
        return false;
      }

eu tbm ja pensei em chamar o fechaConexao() de outro ponto, depois de usar o ResultSet, mas pra fazer isso, eu teria que declarar uma nova instancia da classe banco, fazer:

Banco bd = new Banco()

o metodo construtor ta vazio, pq uso o abrirConexao() pra criar uma conexão com o banco e criar um Connection…
mas ai fica a pergunta, como é uma instancia nova da classe, se eu tentar fechar a conexão dessa nova instancia, sera que vai fechar a conexão certa???

Anime

Oi,

Não encontrei sua fonte de dados… :roll:

package venda.conexao;

import java.sql.*;
import javax.sql.*;
/**
 *
 * @author Ana Claudia
 */
public class Conexao {
	Connection con;
	private Connection oConn;
	private Statement sStmt;
        private ResultSet rs;

	 public Conexao(){
	}
	/**
	 * Conecta com o banco.
	 * 
	 * @return con conexão estabelecida.
	 */

	public Connection conecta() {
		try{
			Class.forName("com.mysql.jdbc.Driver");
			String url = "jdbc:mysql://localhost:3306/vendas";
			con = DriverManager.getConnection(url, "root", "123456");
			System.out.println("Conexão efetuada com sucesso!!");
			return con;
		}catch(Exception e){
			e.printStackTrace();
			return null;
		}
	}
	public ResultSet rs(String sSQL){
		oConn = conecta();
		try{
			sStmt = oConn.createStatement();
			ResultSet oRS = sStmt.executeQuery(sSQL);
			return oRS;
		}catch(Exception e){
			System.out.println(e.getMessage());
			return null;
		}
	}

	/**
	 * Encerra a conectividade com o banco.
	 * 
	 */
	public void desconecta() {
		try{
			sStmt.close();
			con.close();
		}catch(Exception e){
			System.out.println("Erro ao fechar conexão com banco!!!" + e.getMessage());
		}
	}


}
Criado 10 de julho de 2011
Ultima resposta 10 de jul. de 2011
Respostas 3
Participantes 3