Zapytanie do bazy danych oznacza przeszukiwanie jej danych. Odbywa się to poprzez wysyłanie poleceń SQL do bazy danych. Aby to zrobić, potrzebujesz najpierw otwartego połączenia z bazą danych. Gdy masz już otwarte połączenie, musisz utworzyć obiekt Statement
, jak poniżej:
Statement statement = connection.createStatement();
Po utworzeniu Statement
możesz go użyć do wykonania zapytania SQL, jak poniżej:
String sql = "select * from people";ResultSet result = statement.executeQuery(sql);
Gdy wykonasz zapytanie SQL, otrzymasz z powrotem ResultSet
. ResultSet
zawiera wynik Twojego zapytania SQL. Wynik zwracany jest w wierszach z kolumnami danych. Możesz iterować po wierszach ResultSet
w następujący sposób:
while(result.next()) { String name = result.getString("name"); long age = result.getLong ("age");}
Metoda ResultSet.next()
przenosi do następnego wiersza w ResultSet
, jeśli istnieją już wiersze. Jeśli są już wiersze, zwraca wartość true. Jeśli nie było więcej wierszy, zwróci false.
Musisz wywołać next()
co najmniej jeden raz, zanim będziesz mógł odczytać jakiekolwiek dane. Przed pierwszym wywołaniem next()
wskaźnik ResultSet
jest umieszczony przed pierwszym wierszem.
Możesz uzyskać dane kolumny dla bieżącego wiersza, wywołując niektóre metody getXXX()
, gdzie XXX jest prymitywnym typem danych. Na przykład:
result.getString ("columnName"); result.getLong ("columnName"); result.getInt ("columnName"); result.getDouble ("columnName"); result.getBigDecimal("columnName"); etc.
Nazwa kolumny, której wartość chcesz uzyskać, jest przekazywana jako parametr do każdego z tych wywołań metod getXXX()
.
Zamiast tego możesz również przekazać indeks kolumny, tak jak poniżej:
result.getString (1); result.getLong (2); result.getInt (3); result.getDouble (4); result.getBigDecimal(5); etc.
Aby to działało, musisz wiedzieć, jaki indeks ma dana kolumna w ResultSet
. Możesz uzyskać indeks danej kolumny, wywołując metodę ResultSet.findColumn()
, w ten sposób:
int columnIndex = result.findColumn("columnName");
Jeśli iterujesz dużą liczbę wierszy, odwoływanie się do kolumn przez ich indeks może być szybsze niż przez ich nazwę.
Kiedy skończysz iterować ResultSet
, musisz zamknąć zarówno ResultSet
, jak i obiekt Statement
, który go utworzył (jeśli z nim skończyłeś, to znaczy). Zrobisz to przez wywołanie ich metod close()
, jak poniżej:
result.close();statement.close();
Oczywiście powinieneś wywołać te metody wewnątrz bloku finally
, aby upewnić się, że zostaną one wywołane nawet jeśli podczas iteracji ResultSet
wystąpi wyjątek.
Pełny przykład
Oto pełny przykład kodu zapytania:
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();
A tutaj przykład jest ponownie, z dodanymi blokami try-finally
. Zauważ, że opuściłem bloki catch
, aby skrócić przykład.
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();}