- JDBC:n asentaminen
Ei vaadi erillisiä toimenpiteitä. JDBC tulee Java-ohjelmointivälineiden (esim. j2sdk1.4.0) mukana.
- Tietokanta
Ei vaadi erillisiä toimenpiteitä, jos toimitaan olemassaolevan tietokantajärjestelmän kanssa. Muuten asentaminen riippuu täysin valitusta tietokantaohjelmistosta.
- Tietokanta-ajuri
Tietokantatoimittajalta löytyy yleensä JDBC-ajuri. Asentaminen on yleensä yksinkertaista, eli ajuri vain kopioidaan oikeaan kansioon.
Jotta Javan virutaalikone löytäisi ajurin suorituksen aikana, ajurin polkunimi täytyy lisätä käyttöjärjestelmän
CLASSPATH-ympäristömuuttujaan. Mikäli ajuri on tavallinen java-tiedosto, lisätään tuon tiedoston hakemiston nimiCLASSPATH-muuttujaan. Jos taas kysymyksessä on Javan arkistotiedosto (jar-tiedosto), joka siis koostuu jostain Java-luokkia sisältävästä hakemistosta,CLASSPATH-muuttujaan täytyy lisätä tämän jar-tiedoston nimi. Jos ohjelmaa ajetaan vain Xemacsin sisältä, lisääminen voidaan tehdä JDE:n Global Classpath -muuttujaan.
- Yleistä
Tietokannan käyttäminen edellyttää useiden
java.sql-paketista löytyvien luokkien käyttämistä. Nämä voidaan ottaa mukaan esim.import-lauseilla:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
- Ajurin lataaminen
Ajuri on määritelty omana luokkanaan. Se lataamisessa käytetään hyväksi Javassa olevan
Class-luokan staattista metodiaforName(String nimi), jolla luokkaan voidaan dynaamisesti viitata sen nimen sisältävällä merkkijonolla. Esimerkiksi PostgreSQL-tietokannan ajuriluokka latautuu komennolla:
Class.forName("org.postgresql.Driver")- Yhteyden muodostaminen
Ohjelmasta muodostetaan yhteys tietokantaan
DriverManager-luokan staattisella metodillagetConnection, jolla annetaan tietokannan osoite, käyttäjätunnus ja salasana. Jos esimerkiksi PostgreSQL-järjestelmään on luotu tietokantaOmakanta, voidaan yhteys muodostaa seuraavasti:
Connection c = DriverManager.getConnection("jdbc:postgresql:Omakanta", "Käyttäjä", "Salasana");Yhteys suljetaan lopuksi metodilla
close(), esimerkiksic.close().- Lauseen luominen
Tietokantatoimintoja (päivityksiä ja kyselyjä) edustamaan luodaan lause, eli olio, joka on tyypiltään
java.sql.Statement. Esimerkiksi:
Statement s = c.createStatement();- Päivityskomennot
Päivityskomennot muuttavat tietokannan sisältöä. Ne tehdään lauseen metodilla
executeUpdate(String komento), missä komento on päivityksen tekevä SQL-lause. Esimerkiksi:
s.executeUpdate("CREATE TABLE TUOTE (NIMI VARCHAR(32), ...)");
s.executeUpdate("INSERT INTO TUOTE VALUES ('Venttiili V238', ...)");- Kyselykomennot
Kyselyiden avulla voidaan tietokannasta hakea tietoa ohjelmaan. Ne tehdään lauseen (
Statement) metodillaexecuteQuery(String kysely). Kyselyt tuottavat tulosjoukon (java.sql.ResultSet), jota voidaan ohjelmassa käydä läpi. Esimerkki:
ResultSet r = s.executeQuery("SELECT * FROM TUOTE");
while (r.next()) System.out.println(r.getString("NIMI"));Tulosjoukkoon liittyy kursori, jota voidaan siirtää oletusarvoisesti joukossa eteenpäin
next()-metodilla. Alussa kursori osoittaa tulosjoukon eteen, eli sitä on aina kutsuttava ainakin kerran, ennenkuin tulosjoukon alkioita voidaan lukea. Kenttien arvoja voidaan riviltä lukea tietotyyppikohtaisilla metodeilla, esim.r.getString("NIMI").
ResultSeton luokka, jossa on määritelty toistasataa metodia tulosjoukon käsittelyyn tai sen päivittämiseen (esim.rs.updateString(1, "huu")). Kursoria voidaan siirtää myös taaksepäin (previous()), mielivalaiselle riville (absloute(int rivi)) tai suhteessa tämänhetkiseen riviin (relative(int muutos)). Käsiteltävään riviin tehdyt muutokset voidaan päivittää tietokantaan (updateRow()), se voidaan tuhota (deleteRow()) tai rivejä voidaan lisätä tulosjoukkoon (insertRow()).- Poikkeukset
Tietokantaoperaatiot voivat tuottaa poikkeuksen
SQLException. Tältä poikkeukselta voidaan kysyä poikkeukseen liittyvän viestin (getMessage()) lisäksi SQL-tilaa (getSQLState()) ja tietokantajärjestelmästä riippuvaa virhekoodia (getErrorCode()).- Transaktiot
JDBC:ssä kommittointi tapahtuu oletusarvoisesti jokaisen tietokantapäivityksen jälkeen (auto commit mode). Auto commit voidaan laittaa pois päältä (tai takaisin päälle) yhteyden (
Connection) metodillasetAutoCommit(boolean uusi), esimerkiksic.setAutoCommit(false))Jos auto commit on pois päältä, täytyy ohjelmassa itse kutsua sopivissa kohdissa yhteyden metodeja
commit()tairollback(). Jälkimmäinen on käytännössä syytä tehdä aina, jos tietokantapäivityksen seurauksena syntyySQLExceptionja edellinen päivitysten jälkeen, mikäli mitään ongelmia ei esiintynyt.- Valmiiksikäänntetyt lauseet
JDBC:n kautta voidaan luoda SQL-lausekkeita, jotka on valmiiksi käännetty ja joille voidaan vain toimittaa tarvittavat parametrit. Esimerkki:
PreparedStatement ps = c.prepareStatement("SELECT NIMI, ? FROM TUOTE");
ps.setString(1, "KUVAUS");
ResultSet r = ps.executeQuery();- Muita piirteitä
JDBC:n kautta voidaan tietokantaan tallettaa proseduureja, kutsua talletettuja proseduureja, niputaa päivityksiä (batch updates), käsitellä SQL3:n tietotyyppejä (BLOB, CLOB, ARRAY, ...) , suorittaa hajautettuja transaktioita, yms. Tällaisten piirteiden hyödyntäminen luonnollisestikin edellyttää, että käytettävä tietokantajärjestelmä tukee niitä.