Felipe Leiva

Programming blog

Obtener el número de filas en un ResultSet

Un objeto tipo ResultSet en Java, es un objeto que almacena los resultados devueltos por la ejecución de una consulta a una base de datos. A través de este objeto podremos recorrer todas las filas y obtener el valor de sus campos, además de otros datos.

Por defecto, el objeto ResultSet en Java no nos provee un método para acceder al número de filas retornadas por una consulta a la base de datos. Esta es una operación que podemos programar en un método reutilizable de nuestra clase.

Para empezar, pongamonos en un escenario en que tengamos una tabla usuarios con N cantidad de registros, ya sea una base de datos MySQL, SQLite o con la que estés trabajando, en el ejemplo trabajaré con SQLite (esto requiere instalar una librería, pero el propósito final es que resulte como código ilustrativo).

Class.forName("org.sqlite.JDBC");

String cadenaConexion = new String("jdbc:sqlite:C:\database.sqlite");

Connection conexion = DriverManager.getConnection(cadenaConexion);

Statement query = conexion.createStatement();

ResultSet rs = query.executeQuery("SELECT * FROM usuarios");

Enfoquémosnos en las últimas dos lineas de código, ya que las primeras tres son únicamente para la conexión. En la penúltima linea creamos un objeto Statement para realizar la consulta, y en la última linea ejecutamos la consulta para obtener los registros de la tabla usuarios. La ejecución retorna un ResultSet que almacenamos en rs.

Calcular el número de registros obtenidos

Como no existe un método para acceder directamente al número de filas obtenidas, recorreremos todas las filas del ResultSet para calcularlo.

int contador = 0;

while (rs.next()) {

    contador++;

}

rs.first();

Como en cada next() el ResultSet se va moviendo al registro siguiente, al finalizar el conteo, ponemos nuevamente el puntero al registro actual en el primero llamando al método first(). De esta manera lo dejamos tal cual estaba, para que probablemente otro procedimiento quiera analizar los registros.

Nota: Si ya se había llamado a next() antes de realizar el conteo, es preciso hacer un first() previo al llamado de este procedimiento, para que comienze a contar desde un principio.

Comprobar existencia de un registro

A veces necesitaremos comprobar la existencia de un registro específico, por ejemplo, cuando un usuario se registra, deberemos comprobar si su nombre de usuario ya existe en la base de datos, ya que este dato no se puede repetir. Con esto solo hacemos:

Statement query = conexion.createStatement();

ResultSet rs = query.executeQuery("SELECT * FROM usuarios WHERE nombre_usuario='felipe'");

boolean existeUsuario =  rs.next();

next() es un método que retorna true en caso de que exista un registro siguiente, y a la vez, sitúa al ResultSet en el registro siguiente para poder recorrerlo. Si no existe nisiquiera un registro, simplemente retorna false.

Conclusión

Estas operaciones son bastante sencillas de programar, y a la vez resultan muy útiles cuando estamos programando nuestras clases relacionadas a base de datos. Podemos volverlas procedimientos reutilizables con solo ponerlas en un método y que por ejemplo reciba como argumento el ResultSet que queremos contar.

About these ads

2 Respuestas a “Obtener el número de filas en un ResultSet

  1. Allistter diciembre 27, 2013 en 10:50 pm

    Bueno dejo mi coment ya que me parecio muy util la verdad no se me habia ocurrido antes abria dos conexiones una para usar el count y otra para crear mi objeto y agregar datos para el modelo.

    Esta opcion me ahorra recursos, y la verdadera razón por la que comento es para dejar mi experiencia, pues veras yo estoy trabajando con mysql e hice lo que dices, hago el conteo, guardo el resultado en una variable y luego ya use eso para crear mi objeto y claro, necesito reiniciar el resulset, en el post dices que es con

    rs.first();

    Use eso y lo que obtenia era mi tabla de busqueda (ya que para eso la uso) y en el jtable tengo el numero de filas que corresponde a los datos que se deben mostrar, pero el primer dato no esta y esto conlleva a que aparezca la ultima fila vacia.
    Algo así: [2][3][4][5][ ]

    Bueno la solución en mi caso fue usar el

    rs.beforeFirst();

    Ya con eso obtengo
    [1][2][3][4][5]

    Espero y le sirva a alguien

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

%d personas les gusta esto: