Exhausted Resultset

4 respostas
E

Pessoal, estamos fazendo uma apliação web com algumas consultas a banco.

A maioria das consultas funciona, porém tem uma que lança, quando tentamos acessar um dado do ResultSet, uma SQLException com a mensagem “Exhausted resultset”. Alguém já viu isso e sabe como resolver??

public ResultSet recuperarProduto(int codigo) {
  return executarQuery(
    "SELECT NomPro, ImaPro " +
      "FROM Produto " +
      "WHERE CodPro = " + codigo
  );
}

private ResultSet executarQuery(String query) {
    ResultSet r = null;
    try {
      Connection conn = conectarBD();
      Statement s = conn.createStatement(
      ResultSet.TYPE_SCROLL_INSENSITIVE,
      ResultSet.CONCUR_READ_ONLY
    );
    s.execute(query);
    r = s.getResultSet();
  } catch (SQLException e) {
    e.printStackTrace();
  }
  return r;
}

private Connection conectarBD() {
    Connection conn = null;
    try {
      Class.forName("oracle.jdbc.driver.OracleDriver");
      conn =  DriverManager.getConnection(
        "jdbc:oracle:thin:@10.2.0.4:1521:dcc",
        "naoVou",
        "teMostrar"
      );
  } catch (SQLException e) {
    e.printStackTrace();
  } catch (ClassNotFoundException e) {
    e.printStackTrace();
  }
  return conn;
}

Em outra classe, tentamos acessar o ResultSet da seguinte forma:

try {
    ResultSet r = InterfaceBancoDados.getInstance().recuperarProduto(codigo);
    if (r != null) {
      r.beforeFirst();
      this.codigo = codigo;
      this.nome = r.getString("NomPro"); // exceção lançada AQUI
      this.enderecoImagem = r.getString("ImaPro");
    }
  } catch (SQLException e) {
    e.printStackTrace();
  }

Socorro! :oops:

4 Respostas

_fs

Cara, estranho isso.

Comigo acontecia quando eu fechava o ResultSet antes de manipulá-lo.

Olha direitinho o seu código, talvez você esteja fechando-o em alguma ourta parte.

E

Pois é, achei o error code 17011 que está dentro dos erros de conexão, e que seria por causa disso que você falou, o resultset estaria fechado…mas ele não é fechado em lugar nenhum :frowning:

L

“escordeiro”:

try {
    ResultSet r = InterfaceBancoDados.getInstance().recuperarProduto(codigo);
    if (r != null) {
      r.beforeFirst();
      this.codigo = codigo;
      this.nome = r.getString("NomPro"); // exceção lançada AQUI
      this.enderecoImagem = r.getString("ImaPro");
    }
  } catch (SQLException e) {
    e.printStackTrace();
  }

Socorro! :oops:

Acontece que r.beforeFirst(); posiciona o resultset antes da primeira linha. E o resultSet já vem posicionado neste ponto, altere o seu código para: detalhe o if

try {
    ResultSet r = InterfaceBancoDados.getInstance().recuperarProduto(codigo);
    if ( r.next() ) {
      this.codigo = codigo;
      this.nome = r.getString("NomPro"); // exceção lançada AQUI
      this.enderecoImagem = r.getString("ImaPro");
    }
  } catch (SQLException e) {
    e.printStackTrace();
  }

flw

E

Perfeito lap_junior :smiley:

Brigadão galera

Criado 25 de maio de 2004
Ultima resposta 25 de mai. de 2004
Respostas 4
Participantes 3