Foros del Web » Programación para mayores de 30 ;) » Java »

ResultSet no abierto. Operación 'next' no permitida. Verifique que AutoCommit sea OFF

Estas en el tema de ResultSet no abierto. Operación 'next' no permitida. Verifique que AutoCommit sea OFF en el foro de Java en Foros del Web. Hola, estoy tratando de mostrar los datos de un resultset en una pagina JSP, y me sale este error. La onda es que en base ...
  #1 (permalink)  
Antiguo 15/02/2008, 12:57
 
Fecha de Ingreso: diciembre-2007
Mensajes: 36
Antigüedad: 16 años, 5 meses
Puntos: 0
ResultSet no abierto. Operación 'next' no permitida. Verifique que AutoCommit sea OFF

Hola, estoy tratando de mostrar los datos de un resultset en una pagina JSP, y me sale este error. La onda es que en base a un parametro que le paso del jsp anterior ('cuit') me realize una busqueda de incidencias dentro de una tabla y me las vaya listando en el actual jsp.
Este es el codigo que estoy usando:
Código:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<jsp:useBean id="incidenciasBD" scope="session" class="com.midominio.accesoabase.IncidenciasBD"/>
<jsp:setProperty name="incidenciasBD" property="*"/>
<%@ page import="java.sql.ResultSet" %>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Consultas y Reclamos</title>
</head>
<body>
<form name="consulta" method="post" action="consultaCuit.jsp">
	<%
	boolean hayDatos = false;
	String cuit = request.getParameter("cuit");
	incidenciasBD.setIdCliente(cuit);
	incidenciasBD.isValid(); //esto llama al metodo que arma y ejecuta el QUERY

	ResultSet resultado = incidenciasBD.getResultado();
	
	while (resultado.next()) {
        if (!hayDatos) {
            hayDatos = true;
			%>
        	<table>
		      	<tr><td>Cliente</td><td>Incidencia</td><td>Fecha</td><td>Tema</td><td>Operador</td><td>Texto</td></tr>
	    	<%
    	}
	    %>
	    <tr>
	    <td><%=resultado.getString(1)%></td>
		<td><%=resultado.getString(2)%></td>
    	<td><%=resultado.getString(3)%></td>
    	<td><%=resultado.getString(4)%></td>
    	<td><%=resultado.getString(5)%></td>
    	<td><%=resultado.getString(6)%></td>
	    </tr>
	    <%
	}
	resultado.close();

	if (hayDatos) {
    	%>
    	</table>
    	<%
	} else {
    	%>
    	<p>No hay datos para este cliente<br/>
    	<%
	}
	%>
	<br/><input type="submit" name="xxx" value="      Volver a consulta por Cuit     ">
</form>
<form action="consultaEmpresa.jsp">
	<input type="submit" name="xxx" value="Volver a consulta por Empresa">
</form>
</body>
</html>
Alguno me dice oprque no me muestra lo que pido?

Gracias de antemano
  #2 (permalink)  
Antiguo 15/02/2008, 14:56
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: ResultSet no abierto. Operación 'next' no permitida. Verifique que AutoCommit sea

Sin saber lo que lo hace incidenciasBD.getResultado(), sólo te lo puede decir un adivino .

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #3 (permalink)  
Antiguo 18/02/2008, 09:02
 
Fecha de Ingreso: diciembre-2007
Mensajes: 36
Antigüedad: 16 años, 5 meses
Puntos: 0
Re: ResultSet no abierto. Operación 'next' no permitida. Verifique que AutoCommit sea

Tenes razon, perdon, aca esta la clase IncidenciasBD:

Código:
package com.mercosuronline.accesoabase;

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

public class IncidenciasBD {

	private String idCliente;
	private boolean valido = false;
	private boolean hayError = false;
	
	ResultSet resultado = null;
	
	private boolean ejecutarConsulta() throws SQLException{
		boolean existe = false;
		
		Connection coneccion = null;
		PreparedStatement sentencia = null;
		
		
		String DRIVER = "org.apache.derby.jdbc.EmbeddedDriver";
		String URL = "jdbc:derby:e:\\Usuarios";
		String QUERY = 	"SELECT * FROM AGUSTIN.INCIDENCIAS WHERE ID_CLIENTE = ? ORDER BY NRO_INCIDENCIA DESC";
		
		try{
			System.out.println("Iniciando DRIVER "+DRIVER+"...");
			Class.forName(DRIVER);
			System.out.println("Driver iniciado - Conectando a URL "+URL+"...");
			coneccion = DriverManager.getConnection(URL);
			coneccion.setAutoCommit(false);
			System.out.println("Coneccion exitosa - Iniciando QUERY "+QUERY+"...");
			sentencia = coneccion.prepareStatement(QUERY);
			System.out.println("QUERY preparado - Seteando OBJECT consultaCuit "+idCliente+"...");
			sentencia.setString(1, idCliente);
			System.out.println("Ejecutando sentencia "+QUERY+"...");
			resultado = sentencia.executeQuery();
			System.out.println("Sentencia "+QUERY+" ejecutada exitosamente.");
			
			if(resultado.next()){
				//si encontro
				existe = true;
			} else {
				existe = false;
			}
		} catch (Exception e){
			e.printStackTrace();
		} finally {
			if(resultado != null) resultado.close();
			if(sentencia != null) sentencia.close();
			if(coneccion != null) coneccion.close();
		}
		
		return (existe);	
	}
	
	//getters y setters
	
	public String getIdCliente(){
		return idCliente;
	}
	public void setIdCliente(String c){
		idCliente = c;
	}
	
	public boolean isValid(){
		if(valido) return true;
		try{
			valido = ejecutarConsulta();
			hayError = false;
		}catch(Exception e){
			valido = false;
			hayError = true;
		}
		return valido;
	}
	
	public boolean isError(){
		return hayError;
	}
	
	public void limpiarConsulta(){
		idCliente = null;
		valido = false;
	}

	public ResultSet getResultado() {
		return resultado;
	}
}
Ahora si, getResultado() devuelve el ResultSet 'resultado', el cual se carga con la consulta al llamar a isValid(), que a su vez llama a ejecutarConsulta() y carga a 'resultado' en la linea 'resultado = sentencia.executeQuery();'
Estoy bien no? Donde esta la falla?
  #4 (permalink)  
Antiguo 18/02/2008, 09:36
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: ResultSet no abierto. Operación 'next' no permitida. Verifique que AutoCommit sea

A ver, en el metodo ejecutarConsulta estas cerrando la conexion, el resultset, el statement... entonces al llamar al siguiente metodo para recorrel el resultset esta todo cerrado. No puedes recorrer un resultset despues de haberlo cerrado.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #5 (permalink)  
Antiguo 20/02/2008, 09:00
 
Fecha de Ingreso: diciembre-2007
Mensajes: 36
Antigüedad: 16 años, 5 meses
Puntos: 0
Re: ResultSet no abierto. Operación 'next' no permitida. Verifique que AutoCommit sea

comente con // dentro del finally todos los close (si comentaba solo el close del resultado me daba el mismo error) y ahora me dice que "El recurso requerido (/Consultas/consultasYReclamos.jsp) no está disponible.", a veces me vuelve a mostrar el error "ResultSet no abierto. Operación 'next' no permitida. Verifique que AutoCommit sea OFF" y a veces me lo muestra bien :S

que puedo hacer para darle estabilidad a mi aplicacion?
  #6 (permalink)  
Antiguo 27/02/2008, 10:00
 
Fecha de Ingreso: diciembre-2007
Mensajes: 36
Antigüedad: 16 años, 5 meses
Puntos: 0
Re: ResultSet no abierto. Operación 'next' no permitida. Verifique que AutoCommit sea

Aca esta IncidenciasBD.java con las clases isValid() y getResultado()

Código:
package com.midominio.accesoabase;

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

public class IncidenciasBD {

	private String idCliente;
	private boolean valido = false;
	private boolean hayError = false;
	
	//campos de la bd a mostrar
//	private String nroIncidencia;
//	private String fecha;
//	private String tema;
//	private String atendidoPor;
//	private String texto;
	ResultSet resultado = null;
	
	private boolean ejecutarConsulta() throws SQLException{
		boolean existe = false;
		
		Connection coneccion = null;
		PreparedStatement sentencia = null;
		
		
		String DRIVER = "org.apache.derby.jdbc.EmbeddedDriver";
		String URL = "jdbc:derby:e:\\Usuarios";
		String QUERY = 	"SELECT * FROM AGUSTIN.INCIDENCIAS WHERE ID_CLIENTE = ? ORDER BY NRO_INCIDENCIA DESC";
		
		try{
			System.out.println("Iniciando DRIVER "+DRIVER+"...");
			Class.forName(DRIVER);
			System.out.println("Driver iniciado - Conectando a URL "+URL+"...");
			coneccion = DriverManager.getConnection(URL);
			coneccion.setAutoCommit(false);
			System.out.println("Coneccion exitosa - Iniciando QUERY "+QUERY+"...");
			sentencia = coneccion.prepareStatement(QUERY);
			System.out.println("QUERY preparado - Seteando OBJECT consultaCuit "+idCliente+"...");
			sentencia.setString(1, idCliente);
			System.out.println("Ejecutando sentencia "+QUERY+"...");
			resultado = sentencia.executeQuery();
			System.out.println("Sentencia "+QUERY+" ejecutada exitosamente.");
			
			if(resultado.next()){
				//si encontro
				existe = true;
//				nroIncidencia = resultado.getString("NRO_INCIDENCIA");
//				fecha = resultado.getString("FECHA");
//				tema = resultado.getString("TEMA");
//				texto = resultado.getString("TEXTO");
//				atendidoPor = resultado.getString("ATENDIDO_POR");
			} else {
				existe = false;
			}
		} catch (Exception e){
			e.printStackTrace();
		} finally {
//			if(resultado != null) resultado.close();
//			if(sentencia != null) sentencia.close();
//			if(coneccion != null) coneccion.close();
		}
		
		return (existe);	
	}
	
	//getters y setters
	
	public String getIdCliente(){
		return idCliente;
	}
	public void setIdCliente(String c){
		idCliente = c;
	}
	
	public boolean isValid(){
		if(valido) return true;
		try{
			valido = ejecutarConsulta();
			hayError = false;
		}catch(Exception e){
			valido = false;
			hayError = true;
		}
		return valido;
	}
	
	public boolean isError(){
		return hayError;
	}
	
	public void limpiarConsulta(){
		idCliente = null;
		valido = false;
	}

	public ResultSet getResultado() {
		return resultado;
	}

}
no se donde esta el error, sera que estoy cargando mal el resultSet?
Otra cosa, en el finally de ejecutarConsulta() teia para cerrar la coneccion el resultset y la sentencia (como veras esta comentado para que no los cierre porque me tiraba un error). Si quiero mantener todo esto abierto, hace falta escribir el finally? (dentro de las llaves del finally no hay nada, asi que pense que podria borrarlo)

Gracias, saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:20.