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();}