El objeto ResultSet representa los resultados de una consulta y no carga toda la información en memoria a la vez. Permite además actualizar, eliminar e insertar filas.

Cursor del ResultSet

Configuración del ResultSet

Al crear un Statement, PreparedStatement o CallableStatement se pueden configurar los aspectos del ResultSet:

createStatement(int resultSetType, int resultSetConcurrency);
prepareStatement(String SQL, int resultSetType, int resultSetConcurrency);
prepareCall(String sql, int resultSetType, int resultSetConcurrency);

Tipos de desplazamiento (resultSetType)

Constante Descripción
ResultSet.TYPE_FORWARD_ONLY Solo permite avanzar (valor por defecto)
ResultSet.TYPE_SCROLL_INSENSITIVE Cualquier dirección, no refleja cambios en la BD
ResultSet.TYPE_SCROLL_SENSITIVE Cualquier dirección, refleja cambios en la BD

Tipos de concurrencia (resultSetConcurrency)

Constante Descripción
ResultSet.CONCUR_READ_ONLY Solo lectura (valor por defecto)
ResultSet.CONCUR_UPDATABLE Permite modificar los datos

El cursor tiene dos posiciones especiales:

  • BFR (Before First Row): posición inicial, antes de la primera fila
  • ALR (After Last Row): después de la última fila
while (rs.next()) {
     String name = rs.getString("titulo");
     float price = rs.getFloat("precio");
     System.out.println(name + "\t" + price);
}

Métodos de posicionamiento

Método Descripción
next() Avanza a la siguiente fila
previous() Retrocede a la fila anterior
beforeFirst() Se sitúa antes de la primera fila
afterLast() Se sitúa después de la última fila
first() Se sitúa en la primera fila
last() Se sitúa en la última fila
absolute(n) Se sitúa en la fila n
relative(n) Avanza o retrocede n filas

Actualización de datos

rs.updateString("campo", "valor");
rs.updateInt(1, 3);
rs.updateRow();

Inserción de filas

rs.moveToInsertRow();
rs.updateString(1, "AINSWORTH");
rs.updateInt(2, 35);
rs.updateBoolean(3, true);
rs.insertRow();
rs.moveToCurrentRow();