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

Error: : Before start of result set

Estas en el tema de Error: : Before start of result set en el foro de Java en Foros del Web. Hola He estado buscando por el foro acerca del error que me salta en java pero no he encontrado algo similar. Tengo dos tablas que ...
  #1 (permalink)  
Antiguo 28/03/2008, 10:26
 
Fecha de Ingreso: enero-2008
Mensajes: 42
Antigüedad: 16 años, 3 meses
Puntos: 2
Error: : Before start of result set

Hola

He estado buscando por el foro acerca del error que me salta en java pero no he encontrado algo similar.

Tengo dos tablas que pertenecen a una misma base de datos(datos): jena_g1t1_stmt

Código:
+---------+--------------+------+-----+---------+-------+
| Field   | Type         | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| Subj    | varchar(100) | NO   | MUL | NULL    |       | 
| Prop    | varchar(100) | NO   |     | NULL    |       | 
| Obj     | varchar(100) | NO   | MUL | NULL    |       | 
| GraphID | int(11)      | YES  |     | NULL    |       | 
+---------+--------------+------+-----+---------+-------+
y jena_long_lit

Código:
+--------+--------------+------+-----+---------+----------------+
| Field  | Type         | Null | Key | Default | Extra          |
+--------+--------------+------+-----+---------+----------------+
| ID     | int(11)      | NO   | PRI | NULL    | auto_increment | 
| Head   | varchar(100) | NO   | MUL | NULL    |                | 
| ChkSum | bigint(20)   | YES  |     | NULL    |                | 
| Tail   | mediumblob   | YES  |     | NULL    |                | 
+--------+--------------+------+-----+---------+----------------+

Por otra parte tengo otra base de datos (resultados) donde quiero hacer inserciones en una tabla llamada ontologia

Código:
+-------------+--------------+------+-----+---------+-------+
| Field       | Type         | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+-------+
| ID          | int(11)      | NO   |     | NULL    |       | 
| Sujeto      | varchar(100) | NO   |     | NULL    |       | 
| Propiedad   | varchar(100) | NO   |     | NULL    |       | 
| Objeto      | varchar(100) | NO   |     | NULL    |       | 
| Comentario1 | varchar(100) | YES  |     | NULL    |       | 
| Comentario2 | mediumblob   | YES  |     | NULL    |       | 
+-------------+--------------+------+-----+---------+-------+
Lo que quiero hacer es insertar el Subj, Prop y GraphID de la tabla jena_g1t1_stmt , en el caso del Obj insertare un valor, dependiendo de si coincide o nocon el ID de jena_long_lit.

Comentario1 y Comentario2 de ontologia se corresponden con Head y Tail de jena_long_lit respectivamente.

La cuestión es que he desarrollado el siguiente código:

Código:
private void tratarTablas(){
		
        try
        {    
		DriverManager.registerDriver(new com.mysql.jdbc.Driver());
                                  
            Connection conexion1 = DriverManager.getConnection (
                 "jdbc:mysql://localhost:3306/datos","root", "xxx");         
            Connection conexion2 =DriverManager.getConnection(
             	"jdbc:mysql://localhost:3306/datos","root", "xxx");
            Connection conexion3 = DriverManager.getConnection (
                    "jdbc:mysql://localhost:3306/resultados","root", "xxx");         
            
            Statement stat = conexion1.createStatement();
            Statement stat2 =conexion2.createStatement();   
   
            ResultSet rs1 = stat.executeQuery ("select * from jena_g1t1_stmt");
            ResultSet rs2 = stat2.executeQuery ("select * from jena_long_lit");
            PreparedStatement stmt=null; 
            
            int id;
     		String sujeto;
     		String propiedad;
     		String objeto;
     		String comentario1;
     		Blob comentario2=null;
     		     		
     		     		
     		int buscado;
     		int intObjeto=0;
     		String objetoAux=new String();
     		
     		boolean dentro;
     		
            while (rs1.next())
            {            	
            	stmt = conexion3.prepareStatement
                ("INSERT INTO ontologia VALUES (?,?,?,?,?,?)");
            	            	
            	id=(Integer)rs1.getObject(4); //primer campo           	
            	sujeto=rs1.getObject(1)); //segundo campo
            	propiedad=rs1.getObject(2)); //tercer campo
            	objeto=(String)rs1.getObject(3);
            	
            	
            	if (objeto.contains("Lr:")){
            		dentro=true;
            		while (dentro||rs2.next()){
            			objetoAux=tc.tratarCampo(objeto);//Obtengo un numero que está dentro de objeto
            			intObjeto=Integer.parseInt(objetoAux);//Convierto a int el número obtenido en la línea 												anterior
            			buscado=rs2.getInt(1);
            			if (intObjeto==buscado){//Aqui es donde falla, o eso creo 
            				dentro=false;
            				comentario1=(String)rs2.getObject(2);
            				comentario2=rs2.getBlob(4);
            			}
            		}
            	}else{
            		comentario1=new String();
            		comentario2=null;
                	}
            	
            	stmt.setInt(1,id);
            	stmt.setString(2,sujeto);
            	stmt.setString(3, propiedad);
        		stmt.setString(4, objeto);           	
            	stmt.setString(5, comentario1);
            	stmt.setBlob(6, comentario2);
            	
            	stmt.executeUpdate();	
            }
            conexion1.close();
            conexion2.close();
            conexion3.close();
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
Y como error me aparece el siguiente:
Código:
java.sql.SQLException: Before start of result set
¿Alguien me podría decir porque ocurre?
Espero que alguien me pueda echar una mano con este código que me está jod..., también espero haberme explicado bien.

Gracias adelantadas.

Saludos.
  #2 (permalink)  
Antiguo 28/03/2008, 17:45
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Re: Error: : Before start of result set

Hola,
Creo que posiblemente el error está aquí:

dentro=true;
while (dentro||rs2.next()){

La primera vez "dentro" tiene el valor true. El bucle while es evaluado como true, aunque el resultSet.next() devuelva false, significando que no hay datos (aunque nunca es evaluada y nunca avanza al siguiente registro).

while (true || false) { // Verdadero ó Falso = Verdadero
// Y al llegar a esta instrucción genera un error:
buscado=rs2.getInt(1); // Puesto que rs2 está antes del primer registro.
}

Saludos,

PS:

Nunca es evaluada por que java utiliza el método "Short Circuit" contrario a otros lenguajes como Visual Basic que usan "Long Circuit". Cuando se usa || con varios valores, inmediatamente después que el compilador sabe la respuesta; es decir que sabe que el resultado va a ser true, no continúa evaluando las expresiones. Por ejemplo:

if (true || myFunc()) {

... myFunc nunca va a ser evaluada, por que el compilador sabe la respuesta antes de evaluarla; sabe que verdadero ó "cualquier cosa (verdadero o falso)" siempre va a ser verdadero. Por lo tanto en tu caso rs2.next() ... nunca se llega a evaluar, y nunca avanza al primer registro.

http://java.sun.com/docs/books/jls/t...ons.html#15.24

Última edición por HackmanC; 28/03/2008 a las 18:19 Razón: short circuit
  #3 (permalink)  
Antiguo 29/03/2008, 09:43
 
Fecha de Ingreso: enero-2008
Mensajes: 42
Antigüedad: 16 años, 3 meses
Puntos: 2
Re: Error: : Before start of result set

Hola

Menudo fallo :$, no había caído en eso, ahora ya si funciona ;)

Muchas 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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 19:16.