JDBC: Tietokannan käsitteleminen Java-ohjelmasta käsin


Asentaminen

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 nimi CLASSPATH-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.


Tietokannan käyttäminen Javasta

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 metodia forName(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 metodilla getConnection, jolla annetaan tietokannan osoite, käyttäjätunnus ja salasana. Jos esimerkiksi PostgreSQL-järjestelmään on luotu tietokanta Omakanta, voidaan yhteys muodostaa seuraavasti:

Connection c = DriverManager.getConnection("jdbc:postgresql:Omakanta", "Käyttäjä", "Salasana");

Yhteys suljetaan lopuksi metodilla close(), esimerkiksi c.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) metodilla executeQuery(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").

ResultSet on 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) metodilla setAutoCommit(boolean uusi), esimerkiksi c.setAutoCommit(false))

Jos auto commit on pois päältä, täytyy ohjelmassa itse kutsua sopivissa kohdissa yhteyden metodeja commit() tai rollback(). Jälkimmäinen on käytännössä syytä tehdä aina, jos tietokantapäivityksen seurauksena syntyy SQLException ja 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ä.


Last modified: Thu May 16 09:55:14 EEST 2002