JDBC: Interogarea bazei de date

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

Lasă un răspuns

Adresa ta de email nu va fi publicată.