JDBC: Consultar la base de datos

Consultar una base de datos significa buscar entre sus datos. Esto se hace enviando sentencias SQL a la base de datos. Para ello, primero se necesita una conexión abierta a la base de datos. Una vez que tengas una conexión abierta, necesitas crear un objeto Statement, así:

Statement statement = connection.createStatement();

Una vez que hayas creado el Statement puedes usarlo para ejecutar consultas SQL, así:

String sql = "select * from people";ResultSet result = statement.executeQuery(sql);

Cuando ejecutas una consulta SQL obtienes de vuelta un ResultSet. El ResultSet contiene el resultado de su consulta SQL. El resultado se devuelve en filas con columnas de datos. Se iteran las filas del ResultSet así:

while(result.next()) { String name = result.getString("name"); long age = result.getLong ("age");}

El método ResultSet.next() se mueve a la siguiente fila en el ResultSet, si hay más filas. Si hay más filas, devuelve true. Si no hay más filas, devuelve false.

Es necesario llamar a next() al menos una vez antes de poder leer cualquier dato. Antes de la primera llamada a next() se coloca el ResultSet antes de la primera fila.

Se pueden obtener los datos de las columnas de la fila actual llamando a alguno de los métodos getXXX(), donde XXX es un tipo de dato primitivo. Por ejemplo:

 result.getString ("columnName"); result.getLong ("columnName"); result.getInt ("columnName"); result.getDouble ("columnName"); result.getBigDecimal("columnName"); etc.

El nombre de la columna para obtener el valor se pasa como parámetro a cualquiera de estas llamadas a los métodos getXXX().

También puede pasar un índice de la columna en su lugar, así:

 result.getString (1); result.getLong (2); result.getInt (3); result.getDouble (4); result.getBigDecimal(5); etc.

Para que eso funcione necesita saber qué índice tiene una columna dada en el ResultSet. Puedes obtener el índice de una columna determinada llamando al método ResultSet.findColumn(), así:

 int columnIndex = result.findColumn("columnName");

Si iteras grandes cantidades de filas, referenciar las columnas por su índice puede ser más rápido que por su nombre.

Cuando termines de iterar el ResultSet necesitas cerrar tanto el ResultSet como el objeto Statement que lo creó (si has terminado con él, claro). Lo haces llamando a sus métodos close(), así:

result.close();statement.close();

Por supuesto, debes llamar a estos métodos dentro de un bloque finally para asegurarte de que se llamen aunque se produzca una excepción durante la iteración del ResultSet.

Ejemplo completo

Aquí tienes un ejemplo de código de consulta completo:

Statement statement = connection.createStatement();String sql = "select * from people";ResultSet result = statement.executeQuery(sql);while(result.next()) { String name = result.getString("name"); long age = result.getLong("age"); System.out.println(name); System.out.println(age);}result.close();statement.close();

Y aquí está el ejemplo de nuevo, con bloques try-finally añadidos. Fíjate que he dejado fuera los bloques catch para hacer el ejemplo más corto.

Statement statement = null;try{ statement = connection.createStatement(); ResultSet result = null; try{ String sql = "select * from people"; ResultSet result = statement.executeQuery(sql); while(result.next()) { String name = result.getString("name"); long age = result.getLong("age"); System.out.println(name); System.out.println(age); } } finally { if(result != null) result.close(); }} finally { if(statement != null) statement.close();}

Deja una respuesta

Tu dirección de correo electrónico no será publicada.