Att fråga i en databas innebär att söka i dess data. Du gör det genom att skicka SQL-uttalanden till databasen. För att göra det behöver du först en öppen databasanslutning. När du har en öppen anslutning måste du skapa ett Statement
-objekt, så här:
Statement statement = connection.createStatement();
När du har skapat Statement
kan du använda det för att utföra SQL-förfrågningar, så här:
String sql = "select * from people";ResultSet result = statement.executeQuery(sql);
När du utför en SQL-förfrågan får du tillbaka ett ResultSet
. ResultSet
innehåller resultatet av din SQL-fråga. Resultatet returneras i rader med datakolumner. Du itererar raderna i ResultSet
så här:
while(result.next()) { String name = result.getString("name"); long age = result.getLong ("age");}
Metoden ResultSet.next()
flyttar till nästa rad i ResultSet
, om det finns fler rader. Om det finns fler rader returnerar den true. Om det inte fanns fler rader returnerar den false.
Du måste anropa next()
minst en gång innan du kan läsa några data. Innan det första next()
-anropet placeras ResultSet
före den första raden.
Du kan få fram kolonndata för den aktuella raden genom att anropa några av getXXX()
-metoderna, där XXX är en primitiv datatyp. Till exempel:
result.getString ("columnName"); result.getLong ("columnName"); result.getInt ("columnName"); result.getDouble ("columnName"); result.getBigDecimal("columnName"); etc.
Kolumnnamnet som värdet ska hämtas från skickas som parameter till någon av dessa getXXX()
metodanrop.
Du kan också skicka över ett index för kolumnen i stället, som här:
result.getString (1); result.getLong (2); result.getInt (3); result.getDouble (4); result.getBigDecimal(5); etc.
För att det ska fungera måste du veta vilket index en viss kolumn har i ResultSet
. Du kan få indexet för en given kolumn genom att anropa ResultSet.findColumn()
-metoden, så här:
int columnIndex = result.findColumn("columnName");
Om du itererar stora mängder rader kan det vara snabbare att referera till kolumnerna med hjälp av deras index än med hjälp av deras namn.
När du är klar med att iterera ResultSet
måste du stänga både ResultSet
och Statement
-objektet som skapade det (om du är klar med det, det vill säga). Det gör du genom att anropa deras close()
metoder, så här:
result.close();statement.close();
Naturligtvis bör du anropa dessa mehtoder inuti ett finally
block för att försäkra dig om att de anropas även om ett undantag inträffar under ResultSet
iterationen.
Fullständigt exempel
Här är ett exempel på en fullständig frågesökningskod:
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();
Och här är exemplet igen, med try-finally
block tillagt. Observera att jag har utelämnat catch
-blocken för att göra exemplet kortare.
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();}