Interogarea unei baze de date înseamnă căutarea printre datele sale. Acest lucru se face trimițând instrucțiuni SQL către baza de date. Pentru a face acest lucru, aveți nevoie mai întâi de o conexiune deschisă la baza de date. După ce aveți o conexiune deschisă, trebuie să creați un obiect Statement
, astfel:
Statement statement = connection.createStatement();
După ce ați creat Statement
, îl puteți folosi pentru a executa interogări SQL, astfel:
String sql = "select * from people";ResultSet result = statement.executeQuery(sql);
Când executați o interogare SQL, primiți înapoi un ResultSet
. ResultSet
conține rezultatul interogării SQL. Rezultatul este returnat în rânduri cu coloane de date. Se parcurg rândurile din ResultSet
în felul următor:
while(result.next()) { String name = result.getString("name"); long age = result.getLong ("age");}
Metoda ResultSet.next()
trece la următorul rând din ResultSet
, dacă mai există rânduri. Dacă mai există rânduri, aceasta returnează true. Dacă nu au mai existat rânduri, va returna false.
Trebuie să apelați next()
cel puțin o dată înainte de a putea citi orice date. Înainte de primul apel next()
, ResultSet
este poziționat înaintea primului rând.
Puteți obține datele coloanei pentru rândul curent prin apelarea unora dintre metodele getXXX()
, unde XXX este un tip de date primitiv. De exemplu:
result.getString ("columnName"); result.getLong ("columnName"); result.getInt ("columnName"); result.getDouble ("columnName"); result.getBigDecimal("columnName"); etc.
Numele coloanei a cărei valoare trebuie obținută este transmis ca parametru la oricare dintre aceste apeluri ale metodelor getXXX()
.
De asemenea, puteți transmite în schimb un indice al coloanei, astfel:
result.getString (1); result.getLong (2); result.getInt (3); result.getDouble (4); result.getBigDecimal(5); etc.
Pentru ca acest lucru să funcționeze, trebuie să știți ce indice are o anumită coloană în ResultSet
. Puteți obține indexul unei anumite coloane prin apelarea metodei ResultSet.findColumn()
, astfel:
int columnIndex = result.findColumn("columnName");
Dacă iterați cantități mari de rânduri, referirea la coloane prin indexul lor ar putea fi mai rapidă decât prin numele lor.
Când ați terminat de iterat ResultSet
, trebuie să închideți atât ResultSet
, cât și obiectul Statement
care l-a creat (dacă ați terminat cu el, adică). Faceți acest lucru prin apelarea metodelor lor close()
, astfel:
result.close();statement.close();
Desigur, ar trebui să apelați aceste mehtode în interiorul unui bloc finally
pentru a vă asigura că sunt apelate chiar dacă apare o excepție în timpul iterației ResultSet
.
Exemplu complet
Iată un exemplu complet de cod de interogare:
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();
Și iată exemplul din nou, cu blocurile try-finally
adăugate. Observați că am omis blocurile catch
pentru ca exemplul să fie mai scurt.
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();}