JDBC:

Dotazování v databázi znamená prohledávání jejích dat. Provádí se tak odesláním příkazů SQL do databáze. K tomu potřebujete nejprve otevřené připojení k databázi. Jakmile máte otevřené připojení, musíte vytvořit objekt Statement, například takto:

Statement statement = connection.createStatement();

Po vytvoření objektu Statement jej můžete použít k provádění dotazů SQL, například takto:

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

Po provedení dotazu SQL dostanete zpět objekt ResultSet. ResultSet obsahuje výsledek vašeho SQL dotazu. Výsledek je vrácen v řádcích se sloupci dat. Řádky ResultSet iterujete takto:

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

Metoda ResultSet.next() přejde na další řádek v ResultSet, pokud v něm ještě nějaké řádky jsou. Pokud již řádky existují, vrátí true. Pokud by žádné další řádky nebyly, vrátí false.

Před načtením jakýchkoli dat je třeba zavolat next() alespoň jednou. Před prvním voláním next() se ResultSet umístí před první řádek.

Data sloupců pro aktuální řádek můžete získat voláním některé z metod getXXX(), kde XXX je primitivní datový typ. Například:

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

Název sloupce, jehož hodnotu chcete získat, se předává jako parametr některého z těchto volání metody getXXX().

Místo toho můžete předat také index sloupce, například takto:

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

Aby to fungovalo, musíte vědět, jaký index má daný sloupec v ResultSet. Index daného sloupce můžete získat zavoláním metody ResultSet.findColumn() takto:

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

Pokud iterujete velké množství řádků, může být odkazování na sloupce podle jejich indexu rychlejší než podle jejich názvu.

Po ukončení iterace ResultSet musíte zavřít jak ResultSet, tak objekt Statement, který jej vytvořil (pokud jste s ním tedy hotovi). Uděláte to tak, že zavoláte jejich close() metody, například takto:

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

Samozřejmě byste měli tyto mehtody volat uvnitř bloku finally, abyste měli jistotu, že budou zavolány i v případě, že během iterace ResultSet dojde k výjimce.

Úplný příklad

Zde je úplný příklad kódu dotazu:

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 zde je příklad znovu, s přidanými bloky try-finally. Všimněte si, že jsem vynechal bloky catch, aby byl příklad kratší.

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

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.