1.1 El concepto de ResultSet
Cuando ejecutamos una consulta de selección (SELECT), la base de datos nos devuelve un conjunto de filas que cumplen nuestros criterios. En JDBC, este conjunto de resultados se gestiona mediante la interfaz ResultSet.
Podemos imaginar el ResultSet como una tabla virtual con un cursor. Al principio, el cursor apunta justo antes de la primera fila. Cada vez que llamamos al método .next(), el cursor avanza a la siguiente fila. Si existe una fila, devuelve true; si no hay más filas, devuelve false.
IMPORTANTE: Al igual que la conexión y la sentencia, el ResultSet consume recursos del sistema. Es fundamental cerrarlo tras su uso, preferiblemente utilizando un try-con-recursos.
1.2 Ejemplo de Consulta
Vamos a leer todos los autores que tenemos en nuestra base de datos autores.sqlite.
Escribe el código
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class ListarAutores {
public static void main(String[] args) {
String url = "jdbc:sqlite:autores.sqlite";
String sql = "SELECT id, nombre, nacionalidad FROM Autor";
try (Connection con = DriverManager.getConnection(url);
PreparedStatement ps = con.prepareStatement(sql);
ResultSet rs = ps.executeQuery()) {
System.out.println("ID | NOMBRE | NACIONALIDAD");
System.out.println("---------------------------------");
// Recorremos el ResultSet fila a fila
while (rs.next()) {
int id = rs.getInt(id);
String nombre = rs.getString(nombre);
String nac = rs.getString(nacionalidad);
System.out.printf("%d | %s | %s%n", id, nombre, nac);
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
1.3 Obtención de datos por columna
Para extraer los datos de la fila actual, ResultSet proporciona métodos getter específicos para cada tipo de dato:
getInt(columna): para números enteros.
getString(columna): para texto.
getDouble(columna): para números reales.
getBoolean(columna): para valores lógicos.
El parámetro columna puede ser el nombre de la columna (recomendado por claridad) o su índice numérico (empezando en 1).