Hola a todos.
Necesito saber cuantas filas contiene un ResultSet. ¿Hay forma de hacerlo sin recorrer todas las filas con .next()?
Gracias,
David
| |||
Creo que no se puede, no me suena al menos. Pero puedes hacer un ResultSet rs; .. rs.last(); int cuantos = rs.getRow(); en vez de hacer tantos .next(). Te devolverá el número de la última fila, lo que no sé es si tendrás que sumarle 1, restarle 1, o quedarte con ese número ya (haz alguna pruebita) para saber cuantas filas hay. |
| |||
Saber cuantas filas tiene un ResultSet Hola gracias por responder, no había podido contestar porque hemos estado migrando los equipos a un nuevo dominio y no ne había conectado hasta ahorita. el punto es que el JDBC (de Microsoft) no soporta este tipo de cursores y no quiero hacer 2 veces la consulta, también el problema de hacer un .last() es que no se puede regresar al primer registro. He leído que se puede utilizar el RowSet, pero no sé donde encontrar un tutorial de como usarlo, si alguien sabe ... Saludos y gracias. David. |
| |||
La interfaz ResultSet también tiene un método first(), no funciona en tu Driver JDBC? porque podrías hacer ResultSet rs; .. rs.last(); int cuantos = rs.getRow(); rs.first(); O al menos según el API sí. Por otro lado, por qué quieres volver al primero? si lo que vas a hacer es recorrer el resultado leído (digo yo que para eso quieres volver al primero otra vez), porque no cuentas a la vez que vas pasando por todos los next()? |
| |||
Hola Raiko, "O al menos según el API sí. Por otro lado, por qué quieres volver al primero? si lo que vas a hacer es recorrer el resultado leído (digo yo que para eso quieres volver al primero otra vez), porque no cuentas a la vez que vas pasando por todos los next()?" Bueno no me deja hacer un .first(), dice que el objeto no soporta este tipo de cursores. En cuanto a porqué quiero regresar al primero, es porque el metodo lo que hace es devolverme un Object por cada fila del ResultSet, pero el caso es que cuando el ResultSet no tiene filas, debo devolver null (pero un ResultSet vacío no es null); entonces como hago para saber si el mencionado RS está vacío sin recorrerlo primero, pues si le hago .next() ó .last(), luego tengo que regresar a la primera fila para crear el Object. Espero haberme dado a entender, Saludos. |
| |||
Podrías pegar aquí el código? no veo el problema que planteas. Quiero decir, en cuanto entras en un rs.next() ya sabes que tiene resultados, luego no devolveras null. Si por el contrario no entras, devuelves null. Por ejemplo: Código PHP: Otro tipo de solución sería: Código PHP: |
| |||
"Quiero decir, en cuanto entras en un rs.next() ya sabes que tiene resultados, luego no devolveras null. Si por el contrario no entras, devuelves null." Bueno trataré de mostrar código: Código PHP: El punto es que en algún lado necesito validar si hay filas y comenzar a recorrerlo desde la fila 1. Si hago esto en el método ObtenerObjetos, cuando entra en el while ya no es la primera fila, pues en el famoso ResulSet solo puedo utilizar .next(). Si ejecuto la consulta 2 veces no hay problema, pero es lo que quería evitar. Saludos. |
| |||
Entiendo tu problema, pero yo creo que no tienes ninguno la cuestión es organizar mejor las cosas. Puedes hacer dos cosas: 1. Copiar el método obtenerObjetos dentro del while de ConsultaObject 2. Simplemente cambiar la forma en la que haces el obtenerObjetos. Cuando entra ahí ya sabes que hay resultados leídos y un next() hecho. Puedes crear un objeto nada más entrar ya y luego hacer el while también dentro de ese método. O usar el do-while como sigue: Código PHP: Y ya está si te da problemas me dices, saludos!! |
| |||
Hola Raiko, Verdaderamente me has ayudado, la solución resultó mejor con el do...while, porque el método ObtenerObjetos en algún momento lo podría utilizar desde otro lado. Agradezco mucho tu colaboración. Saludos y gracias. |
| |||
Respuesta: Saber cuantas filas tiene un ResultSet Hola DavidOrtiz, Sugiero que hagas 2 querys, el primero que te devuelva el numero de registros y el segundo que te devuelva el listado. 1: select count(*) as cantidad from mitabla where condicion 2: select * from mitabla where condicion Es más rápido pedir el nro de registros mediante una sentencia SQL. Bueno suelo realizar ello. Cualquier estoy en [email protected] Saludos Manuel |