martes, 19 de julio de 2011

¿Cuántas filas retorna un ResultSet?

En uno de mis blogs doy un ejemplo de como retornar un vector con las filas de un ResultSet aún sin saber cuantas filas ha retornado éste, otra forma sencilla de saber la cantidad de filas que retorna un ResultSet es irnos hasta la última fila y extraer el número de ella, como ya sabemos, un ResultSet comienza en la fila 1 así que al irnos a la última fila, podremos saber cuantas filas tiene el ResultSet y cuando ya tengamos el valor nos devolvemos al inicio del ResultSet. He aquí un ejemplo simple y sin validaciones:

miResultSet.moveLast();
int cantFilas = miResultSet.getRow();
miResultSet.beforeFirst();

Para lograr esta funcionalidad (Scrollable ResultSet) debemos declarar el objeto Statement de la siguiente manera:

Statement stmt miConexion.createStatement(
   ResultSet.TYPE_SCROLL_INSENSITIVE,
   ResultSet.CONCUR_READ_ONLY
);
ResultSet miResultSet = stmt.executeQuery( miQuerySQL );


De esta manera también puedes utilizar otras funcionalidades como:
  • absolute( x ) mueve el cursor a la fila x.
  • relative( x ) mueve el cursor x filas hacia adelante o hacia atrás si -x.
  • previous( x ) mueve el cursor una fila hacia atrás, equivalente a previous(-1).
  • first() mueve el cursor a la primera fila, = beforeFirst() + next().
  • last() mueve el cursor a la última fila, = afterLast() + previous().
  • afterLast() mueve el cursor al final del ResultSet, aquí los métodos getXXX() y updateYYY() fallarán ya que estamos sobre una fila.
  • beforeFirst() mueve el cursor al inicio del ResultSet y al igual que el afterLast() los métodos getXXX() y updateYYY() no se deben utilizar.

  • Espero les sea de utilidad, de ser así cheka en [x]útil abajo ;)

    2 comentarios:

    1. Compadre muchas gracias por el comentario, está bueno y esto lo estaba buscando desde hace mucho rato. solo que no sabia como usarlo.
      al parecer en JPA el Framework lo utiliza internamente para realizar paginaciones.
      saludos men.
      cualquier cosa o duda que tengas puedes consultarlo conmigo al joseprox@gmail.com.

      ResponderEliminar