JDBC:

Egy adatbázis lekérdezése az adatbázis adataiban való keresést jelenti. Ezt úgy tesszük, hogy SQL utasításokat küldünk az adatbázisnak. Ehhez először is szükséged van egy nyitott adatbázis-kapcsolatra. Ha már van nyitott kapcsolatod, létre kell hoznod egy Statement objektumot, például így:

Statement statement = connection.createStatement();

Miután létrehoztad a Statement objektumot, használhatod SQL-lekérdezések végrehajtására, például így:

String sql = "select * from people";ResultSet result = statement.executeQuery(sql);

Amikor végrehajtasz egy SQL-lekérdezést, egy ResultSet objektumot kapsz vissza. A ResultSet tartalmazza az SQL-lekérdezésed eredményét. Az eredményt sorokban, oszlopos adatokban kapod vissza. A ResultSet sorait a következőképpen iterálod:

while(result.next()) { String name = result.getString("name"); long age = result.getLong ("age");}

A ResultSet.next() módszer a ResultSet következő sorára lép, ha van még sor. Ha van még több sor, akkor true-t ad vissza. Ha nem volt több sor, akkor false-t ad vissza.

Legalább egyszer meg kell hívni a next() metódust, mielőtt bármilyen adatot beolvashatnánk. Az első next() hívás előtt a ResultSet az első sor elé kerül.

Az aktuális sor oszlopadatait az getXXX() egyes metódusainak hívásával kaphatjuk meg, ahol XXX egy primitív adattípus. Például:

 result.getString ("columnName"); result.getLong ("columnName"); result.getInt ("columnName"); result.getDouble ("columnName"); result.getBigDecimal("columnName"); etc.

Az ilyen getXXX() metódushívások bármelyikének paramétereként átadjuk az oszlop nevét, amelynek értékét meg szeretnénk kapni.

Átadhatjuk helyette az oszlop indexét is, például így:

 result.getString (1); result.getLong (2); result.getInt (3); result.getDouble (4); result.getBigDecimal(5); etc.

Ahhoz, hogy ez működjön, tudnunk kell, hogy az adott oszlopnak milyen indexe van a ResultSet-ben. Az adott oszlop indexét a ResultSet.findColumn() metódus meghívásával kaphatjuk meg, így:

 int columnIndex = result.findColumn("columnName");

Nagy mennyiségű sor iterálása esetén az oszlopokra való hivatkozás az indexük alapján gyorsabb lehet, mint a nevük alapján.

Ha befejeztük az ResultSet iterálását, akkor mind a ResultSet, mind az azt létrehozó Statement objektumot be kell zárnunk (már ha végeztünk vele). Ezt a close() metódusaik meghívásával teszed, így:

result.close();statement.close();

Természetesen ezeket a metódusokat egy finally blokkban kell meghívnod, hogy biztos legyél benne, hogy akkor is meghívódnak, ha a ResultSet iteráció során kivétel lép fel.

Teljes példa

Íme egy teljes lekérdezési kódpélda:

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

És itt a példa újra, try-finally blokkokkal kiegészítve. Vegyük észre, hogy kihagytam a catch blokkokat, hogy rövidebb legyen a példa.

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

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.