Query’s uitvoeren op een database betekent dat de gegevens worden doorzocht. U doet dit door SQL statements naar de database te sturen. Om dit te doen, hebt u eerst een open databaseverbinding nodig. Zodra u een open verbinding hebt, moet u een Statement
-object maken, zoals dit:
Statement statement = connection.createStatement();
Zodra u de Statement
hebt gemaakt, kunt u deze gebruiken om SQL-query’s uit te voeren, zoals dit:
String sql = "select * from people";ResultSet result = statement.executeQuery(sql);
Wanneer u een SQL-query uitvoert, krijgt u een ResultSet
terug. De ResultSet
bevat het resultaat van uw SQL-query. Het resultaat wordt teruggegeven in rijen met kolommen met gegevens. Je itereert de rijen van de ResultSet
als volgt:
while(result.next()) { String name = result.getString("name"); long age = result.getLong ("age");}
De ResultSet.next()
methode gaat naar de volgende rij in de ResultSet
, als er meer rijen zijn. Als er meer rijen zijn, geeft het waar terug. Als er geen rijen meer zijn, retourneert het false.
U moet next()
ten minste een keer oproepen voordat u gegevens kunt lezen. Voor de eerste next()
oproep wordt de ResultSet
gepositioneerd voor de eerste rij.
U kunt kolom gegevens voor de huidige rij krijgen door het aanroepen van een aantal van de getXXX()
methoden, waarbij XXX een primitieve data type is. Bijvoorbeeld:
result.getString ("columnName"); result.getLong ("columnName"); result.getInt ("columnName"); result.getDouble ("columnName"); result.getBigDecimal("columnName"); etc.
De kolomnaam om de waarde van te krijgen wordt doorgegeven als parameter aan elk van deze getXXX()
methode aanroepen.
U kunt ook een index van de kolom in plaats daarvan doorgeven, zoals dit:
result.getString (1); result.getLong (2); result.getInt (3); result.getDouble (4); result.getBigDecimal(5); etc.
Om dat te laten werken moet u weten welke index een bepaalde kolom heeft in de ResultSet
. Je kunt de index van een bepaalde kolom krijgen door de ResultSet.findColumn()
methode op te roepen, zoals dit:
int columnIndex = result.findColumn("columnName");
Als je grote hoeveelheden rijen itereren, kan het verwijzen naar de kolommen door hun index sneller zijn dan door hun naam.
Wanneer je klaar bent met het itereren van de ResultSet
moet je zowel de ResultSet
en de Statement
object dat het gemaakt heeft sluiten (als je er klaar mee bent, dat is). U doet dit door het aanroepen van hun close()
methoden, zoals deze:
result.close();statement.close();
Natuurlijk moet u deze methoden binnen een finally
blok aanroepen om ervoor te zorgen dat ze worden aangeroepen, zelfs als er een uitzondering optreedt tijdens ResultSet
iteratie.
Volledig voorbeeld
Hier is een volledig query code voorbeeld:
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();
En hier is het voorbeeld weer, met try-finally
blokken toegevoegd. Merk op dat ik de catch
blokken heb weggelaten om het voorbeeld korter te maken.
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();}