Tietokannan kysely tarkoittaa sen tietojen etsimistä. Se tapahtuu lähettämällä SQL-lauseet tietokantaan. Tätä varten tarvitset ensin avoimen tietokantayhteyden. Kun sinulla on avoin yhteys, sinun on luotava Statement
-olio, esimerkiksi näin:
Statement statement = connection.createStatement();
Kun olet luonut Statement
:n, voit käyttää sitä SQL-kyselyjen suorittamiseen, esimerkiksi näin:
String sql = "select * from people";ResultSet result = statement.executeQuery(sql);
Kun suoritat SQL-kyselyn, saat takaisin ResultSet
. ResultSet
sisältää SQL-kyselysi tuloksen. Tulos palautetaan riveinä, joissa on sarakkeita. Iteroit ResultSet
:n rivejä seuraavasti:
while(result.next()) { String name = result.getString("name"); long age = result.getLong ("age");}
ResultSet.next()
-metodi siirtyy ResultSet
:n seuraavalle riville, jos rivejä on enää jäljellä. Jos rivejä on enää, se palauttaa true. Jos rivejä ei ole enää, se palauttaa false.
Sinun täytyy kutsua next()
vähintään kerran, ennen kuin voit lukea mitään tietoja. Ennen ensimmäistä next()
-kutsua ResultSet
sijoitetaan ensimmäisen rivin eteen.
Voit saada nykyisen rivin saraketiedot kutsumalla joitakin getXXX()
-metodeja, joissa XXX on primitiivinen tietotyyppi. Esimerkiksi:
result.getString ("columnName"); result.getLong ("columnName"); result.getInt ("columnName"); result.getDouble ("columnName"); result.getBigDecimal("columnName"); etc.
Sarakkeen nimi, jonka arvo halutaan saada, välitetään parametrina mihin tahansa näistä getXXX()
-metodikutsuista.
Voit sen sijaan välittää myös sarakkeen indeksin, esimerkiksi näin:
result.getString (1); result.getLong (2); result.getInt (3); result.getDouble (4); result.getBigDecimal(5); etc.
Jotta tämä toimisi, sinun on tiedettävä, mikä indeksi tietyllä sarakkeella on ResultSet
:ssä. Voit saada tietyn sarakkeen indeksin kutsumalla ResultSet.findColumn()
-metodia näin:
int columnIndex = result.findColumn("columnName");
Jos iteroit suuria määriä rivejä, sarakkeisiin viittaaminen indeksin perusteella saattaa olla nopeampaa kuin sarakkeiden nimen perusteella.
Kun olet lopettanut ResultSet
:n iteroinnin, sinun täytyy sulkea sekä ResultSet
että Statement
-olio, joka on luonut sen (jos olet lopettanut iteroinnin). Teet sen kutsumalla niiden close()
-metodeja, esimerkiksi näin:
result.close();statement.close();
Tietenkin sinun kannattaa kutsua näitä metodeja finally
-lohkon sisällä, jotta varmistat, että niitä kutsutaan, vaikka ResultSet
-iteraation aikana tapahtuisi poikkeus.
Täydellinen esimerkki
Tässä on esimerkki täydellisestä kyselykoodista:
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();
Ja tässä esimerkki vielä kerran lisättynä lohkoilla try-finally
. Huomaa, että olen jättänyt catch
-lohkot pois tehdäkseni esimerkistä lyhyemmän.
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();}