Tik-110.300 Tietoliikennearkkitehtuurit
Mika Uusitalo 43462L
Kotitehtävä 7, 1997
JDBC (Java Database Connectivity)
Mikä on JDBC?
Java Database Connectivity (JDBC) on universaali ja toimittajariippumaton
standardi, jonka mukaan Java-sovellukset voivat operoida SQL-tietokantojen
(Structured Query Language) kanssa. Javan kehittäjäyritys Javasoft
Inc. julkisti JDBC Application Programming Interface (JDBC API) spesifikaatiot
toukokuussa 1996, koska yhä useampi Java-sovellus tarvitsi standardia
tapaa kommunikoida SQL-tietokantojen kanssa. JDBC-spesifikaatiot sisältää
kokoelman rajapintakuvauksia ja abstrakteja luokkia, jotka JBDC ohjelmistorajapinnan
toimittajan täytyy toteuttaa määritellyllä tavalla.
JDBC-määritykset ovat pitkälti samanlaisia Microsoftin ODBC-määritysten
(Open Database Connectivity) kanssa, jotka Microsoft julkaisi jo 80-luvulla
yhtenäistääkseen työasema/palvelin-sovellusten (Client/Server)
tietokantayhteyskäytäntöä [1]. JDBC
on nyt osa JavaSoftin julkaisemaa Java Development Kit (JDK) -kehitysympäristöä
(versio 1.1) [2].
Itse JDBC-rajapinnan sisäinen toteuttaminen on vapaata ja kaikki
toimittajat saavat toteuttaa sen haluamallaan tavalla. JDBC-rajapinta toteutetaan
yleensä ajuriohjelmistolla (JDBC Driver), jotka ovat yleensä
SQL-tietokantakohtaisia. Moni tietokantatoimittaja on jo julkaissut oman
JDBC-ajurinsa.[2]
ODBC- ja JDBC-rajapinnan tietokantaominaisuudet ovat suunnilleen samat.
Standardit JDBC-luokat tukevat seuraavia ominaisuuksia ominaisuuksia:
-
yhdenaikaiset konnektiot useampaan tietokantaan (simultaneous connections)
-
transaktion hallinta (transaction management)
-
yksinkertaiset kyselyt (simple queries)
-
talletettuja tietokantaproseduureja (stored procedures)
-
esikäännettyjen lauseiden manipulointia (pre-compiled statements)
-
sidottuja muuttujia (bind variables)
-
pääsyä tietokannan määrittelytietoihin (database
dictionary)
-
kursoreita (cursors)
Koska JDBC on suunniteltu toimittajariippumattomaksi, se tukee vain relaatiotietokantaliittymän
standardeja SQL-tietotyyppejä. Kuitenkin JDBC on suunniteltu siten,
että se mahdollistaa uusien tietotyyppien määrittelyn, jolloin
tietokantatoimittajat voivat liittää omiin ajureihinsa myös
omia tietotyyppejään.[8]
JDBC:n toiminta
JDBC-standardi pohjautuu Opengroupin X/Open SQL Call Level Interface (SQL
CLI) määrityksiin [3]. SQL CLI määrittelee
standardin tavan, jolla SQL-kieltä voidaan liittää käytettyyn
ohjelmointikieleen siten, että sovellukset voivat olla yhteydessä
SQL-tietokantoihin. SQL CLI tarjoaa luokkakirjastot funktioille, jotka
voidaan linkittää käytettyyn ohjelmointikieleen ja joiden
avulla SQL-kutsua ajon aikana.[4] Kutsurajapinta (Call-Level)
toiminta tarkoittaa, että JDBC keskittyy ajamaan standardeja SQL-lauseita
tietokannassa ja palauttamaan lauseen tulokset takaisin sovellukseen. JDBC-rajapinta
on suunniteltu siten, että sen päälle voi toteuttaa korkeamman
tason tietokantarajapinnan, esim. oliolähtöisesti.[9]
JDBC koostuu kahdesta pääkerroksesta: JDBC API ja JDBC Driver
API. JDBC API tarjoaa palvelut Java-sovelluksen ja JDBC Managerin välillä.
JDBC Driver API hoitaa kommunikoinnin erilaisten JDBC-ajureiden kanssa.
JDBC-ajurit voivat olla Java-pohjaisia, suoraan tietokantarajapintaan liittyviä,
tai ODBC-rajapintaa hyödyntäviä JDBC-ODBC -silta-ajureita.
(JDBC-ODBC Bridge). JDBC-ODBC Bridge liittää standardin JDBC
rajapinnan standardiin ODBC-rajapintaan tulkkaamalla JDBC-kutsut ODBC-kutsuiksi,
jolloin normaaliin ODBC:tä tukevaan tietokantaan liittyminen käy
helposti JDBC:n kautta.[4]
Kuvassa 1 on havainnollistettu JDBC:n kaksi tasoa ja ajuri ja sovelluskerrokset.
Kuva 1: JDBC:n kerrokset [4]
JDBC API:n tärkeimmät Java-luokat ovat:
-
java.sql.DriverManager - lataa yhteyden tarvitsemat JDBC-ajurit
-
java.sql.Connection - tarjoaa Java-oliorajapinnan tietokantaan
-
java.sql.Statement - ympäristö SQL-lauseiden suorittamiselle
tietyn yhteyden (java.sql.Connection) avulla
-
java.sql.ResultSet - tarjoaa Java-oliorajapinnan kyselyn tuottamaan tulosjoukkoon
Muita eniten käytettyjä luokkia ovat:
-
java.sql.CallableStatement
-
java.sql.DataTruncation
-
java.sql.Date
-
java.sql.Driver
-
java.sql.DriverPropertyInfo
-
java.sql.PreparedStatement
-
java.sql.SQLException
-
java.sql.SQLWarning
-
java.sql.Time
-
java.sql.Timestamp
-
java.sql.Types
Otettaessa yhteyttä JDBC:n kautta DriverManager-olion latautuessa
se tarkistaa rekisteröidyt ajurit ja tarkistaa, mikä ajureista
tukee kyseistä tietokantaa ja lataa tarvitsemansa ajurin. Parametrina
voidaan antaa myöskin tietyn ajurin nimi, jotta valintaprosessilta
vältytään. Sopivan JDBC-ajurin avulla muodostetaan yhteys
haluttuun tietokantaan sopivaa verkkoprotokollaa käyttäen. SQL-operaatioita
voidaan suorittaa sql.Statement-oliolla ja mahdollisia tulosjoukkoja voidaan
operoida sqlResultSet-oliolla.[5]
JDBC-yhteys toimii myös Internetin yli. JDBC tukee standardia URL-määrittelyä
(Uniform Resource Locator) viitatakseen tiettyyn Internet-verkon tietokantaan.
JDBC-yhteys Internetin yli voisi tapahtua esimerkiksi seuraavan laisella
URLilla:
<jdbc:odbc://host.domain.com:400/databasefile>
Osoitteen alussa on käytetty protokolla ilmoitettu 'jdbc:odbc',
joka tarkoittaa, että käytetään jdbc-protokollaa ja
aliprotokollaa odbc. Näin ollen JDBC Driver Manager ottaa yhteyden
tietokantaan JDBC-ODBC Bridgeä käyttäen. Loppuosa osoitteesta
on standardin URL-määrittelyn mukaista: ensin on tietokoneen
Domainin nimi, TCP/IP-portti, ja tietokannan nimi (mikäli on tarpeen).
[4]
JDBC-ajurit
JDBC-ajureita on jo lähes kaikilla suurimmilla tietokantatoimittajilla.
Ajurit voidaan asentaa työasemakoneeseen (client) erikseen, tai ladata
Java-aplettina verkosta.
JDBC-ajurit voidaan luokitella neljään kategoriaan:
-
JDBC-ODBC Bridge: JDBC-ODBC-silta, joka tarjoaa JDBC-rajapinnan ODBC-rajapinnan
läpi. Tällöin myös binäärinen ODBC-ajurin
koodi ainakin osittain on ladattava työasemakoneeseen (client)
-
Tietokantaspesifinen API-JDBC-ajuri: ajuri tulkkaa JDBC-kutsut natiiviksi
tietokantakutsuksi tietokannan "omassa" API-muodossa
-
Verkko-orientoitunut JDBC-ajuri: ajuri tulkkaa JDBC-kutsut standardiksi
tietokantariippumattomaksi verkkoprotokollaksi joka sitten tietokantapäässä
tulkataan takaisin tarvittavalle tietokanta-API:lle. Tämän ajurin
avulla sama sovellus voi kytkeytyä moniin erilaisiin tietokantoihin
samassa verkossa.
-
Tietokantaspesifinen verkko-JDBC-ajuri: Ajuri tulkkaa JDBC-kutsut tietylle
tietokannalle sopivaan verkkoprotokollamuotoon. [6]
JDBC-ODBC -silta
JDBC-ODBC -silta on ollut yksi käytetyimmistä liityntätyypeistä.
Koska ODBC-ajureita on lähes joka tietokannalle ja Java-tietokantayhteyksiä
toteutetaan erittäin nopeasti. On erityisen tulkkaavan ajurin kehittäminen
ollut tarpeellista. JDBC-ODBC -silta on JavaSoftin ja InterSolvin yhteistyön
tulos. Se mahdollistaa standardin JDBC-liitynnän mihin tahansa tietokantaan,
johon on olemassa ODBC-ajuri.
JDBC-ODBC -silta riippuu useamman komponentin yhteistoiminnasta. Nämä
komponentit ovat yleensä eri toimittajilta, joten poikkeamia standardista
saatta tulla vastaan ja yhteys on hyvin riskialtis.
Tarvittavat komponentit ja komponenttivalmistajat ovat:
-
JDBC Driver Manager (JavaSoft)
-
JDBC-ODBC Bridge Driver (JavaSoft, InterSolv)
-
ODBC Driver Manager (Microsoft)
-
ODBC Driver (tietokantatoimittaja tai kolmannen osapuolen ODBC-ajurivalmistaja)
-
Tietokanta (tietokantatoimittaja)
Lisäksi jotkut ODBC-ajurit voivat vaatia vielä oman joukkonsa
lisäkomponentteja toimiakseen, kuten toimittajaspesifiä ohjelmistorajapintoja
(API) tai verkkoprotokollia.
Käytettäessä JDBC-ODBC -siltaa tietokantakutsut joutuvat
menemään usean ajurirajapinnan lävitse. Jokaisessa rajapinnassa
mahdollisesti tehdään konversioita parametreille ja funktiokutsuille.
Tämä lisää prosessointimäärää ja
lisää myös ajonaikaisenmuistin kulutusta. Myöskin jokaisessa
rajapinnassa tapahtuvat mahdolliset virheet tekevät rajapinnasta riskialttiin.
Rajapinta on yhtä vahva kuin sen heikoin kohta. [7]
JDBC-ajurien turvallisuus
Java-sovellukset luokitellaan luotettaviin (trusted) ja epäluotettaviin
(untrusted) sovelluksiin. Lähiverkon tai oman koneen levyltä
ladattavat sovellukset luokitellaan yleensä luotettaviksi. WWW-sivuilta
ladattavat apletit sen sijaan vaativat jonkin autentikoimismekanismin,
jotta ne voidaan luokitella luotettaviksi. Tämä tapahtuu esim.
kryptatun allekirjoituksen avulla. Epäluotettavilta sovelluksilta
evätään pääsy paikallisiin tiedostoihin, kuten
myös mielivaltaisiin verkko-osoitteisiin. Luotettavilla sovelluksilla
on oletusarvoisesti vapaa pääsy tiedostoihin ja verkko-osoitteisiin.
JDBC-ajureille on laadittu suosituksia toimintaperiaatteista silloin
kun on kyse epäluotettavasta Java-sovelluksesta jotta ajuri toimisi
turvallisesti. Näitä suosituksia tulisi jokaisen JDBC-ajurin
noudattaa.
Turvallisuusperiaatteet:
-
oletusarvoisesti JDBC pitää kaikkia allekirjottamattomia apletteja
epäluottettavina.
-
epäluottettavat appletit eivät saa muodostaa yhteyttä paikallisiin
tietokantoihin.
-
jos ladattu JDBC-ajuri rekisteröidään Driver Manageriin,
tulee kyseistä ajuria käyttää vain silloin kun otetaan
yhteys sinne, mistä ajuri oli ladattu.
-
epäluottettava apletti saa avata tietokantayhteyden vain siihen verkko-osoitteeseen,
josta se oli ladattu.
-
JDBC:n ei saisi käyttää automaattisesti tai implisiittisesti
mitään paikallisia valtuuksia, kun yhteyttä muodostetaan
verkon yli tietokantapalvelimeen. [9]
JDBC-ajuritoimittajia
Oheisessa listassa on listattu tunnetuimmat JDBC-ajuritoimittajat ja ajurit
on luokiteltu sen mukaan, mihin edellä kuvattuun ajuri kategoriaan
ne kuuluvat:
| Toimittaja |
Ajurityyppi |
Tuetut tietokannat |
| Agave Software Design |
3 |
Oracle, Sybase, Informix, muut ODBC:n kautta |
| Asgard Software |
3 |
Unisys A series DMSII database |
| Borland |
4 |
InterBase 4.0 |
| Caribou Lake Software |
3 |
Ingres |
| Connect Software |
4 |
Sybase, MS SQL Server |
| DataRamp |
3 |
useimmat ODBC:n kautta |
| Ensodex, Inc. |
3 |
useimmat ODBC:n kautta |
| IBM |
2/3 |
IBM DB2 Version 2 |
| IBM |
4 |
DB2 for OS/400 |
| GWE Technologies |
4 |
mysql |
| IDS Software |
3 |
Oracle, Sybase, MS SQL Server, MS Access, Informix, Watcom, muut ODBC:n
kautta |
| I-Kinetics, Inc. |
3 |
Oracle, Informix, Sybase, muut ODBC:n kautta |
| Imaginary |
4 |
mSQL |
| InterSoft |
3 |
Essentia |
| Intersolv |
3 |
DB2, Ingres, Informix, Oracle, Microsoft SQL Server, Sybase 10/11 |
| JavaSoft |
1 |
useimmat ODBC:n kautta |
| KonaSoft, Inc. |
3/4 |
Sybase, Oracle, Informix |
| NetAway |
3 |
Oracle, Informix, Sybase, MS SQL Server, DB2, muut ODBC:n kautta |
| OpenLink |
3 |
Oracle, Informix, Sybase, MS SQL Server, CA-Ingres, Progress, Unify,
PostgreSQL, Solid, muut ODBC:n kautta |
| Oracle
Corporation |
2/4 |
Oracle |
| SAS Institute
Inc. |
3/4 |
SAS, and via SAS/ACCESS, Oracle, Informix, Ingres, ja ADABAS |
| SCO |
3 |
Informix, Oracle, Ingres, Sybase, Interbase |
| StormCloud Development |
3 |
kaikki ODBC:n kautta |
| Sybase, Inc |
3/4 |
Sybase SQL Server, SQL Anywhere, Sybase IQ, Replication Server ja yli
25 palvelinta Sybasen OmniCONNECTin kautta |
| Symantec |
3 |
Oracle, Sybase, MS SQL Server, MS Access, Watcom, muut ODBC:n kautta |
| Trifox, Inc. |
3 |
ADABAS, DB2, Informix, Ingres, Oracle, Rdb, SQL Server, Sybase, legacy
tietokannat GENESIksen kautta. |
| Visigenic |
3 |
useita ODBC:n kautta |
| WebLogic |
2 |
Oracle, Sybase, MS SQL Server |
| WebLogic |
3 |
useita ODBC:n kautta |
| XDB Systems, Inc. |
1/3 |
useita ODBC:n kautta |
| Yard Software GmbH |
4 |
YARD-SQL Database |
[6]
Vaihtoehtoja JDBC:lle
JDBC on yleisin standardi Java-tietokanta -liittymille. Kuitenkin muitakin
vaihtoehtoja on ja etenkin suuret tietokantavalmistajat haluavat tuoda
myös omia ratkaisujaan esille.
-
Microsoftin versio Java Virtual Machinesta tukee myös Microsoftin
omia COM (Common Object Model), DAO (Data Access Objects), ja RDO (Remote
Data Objects) rajapintoja, joiden kautta liittymä erilaisiin tietokantoihin
on mahdollista.Tämä liittymä on mahdollista vain Windows-ympäristöstä.
[7]
-
Oracle on tuonut markkinoille JSQL rajapinnan, jolloin JSQL-lauseet käännetään
esikääntäjässä tietyiksi SQL-lauseiksi. Tämä
liittymismenetelmä on optimoitu erityisesti Oraclen tietokannoille
[8].
-
Tietokantaan voi liittyä myös toisen palvelimen kautta (esim.
www-palvelin) siten, että Java-sovellus otta yhteyttä palvelimeen,
joka sitten ottaa yhteyden tietokantaan ja palauttaa tarvittavat tiedot
esim. HTTP-protokollalla takaisin [7].
Lähteet
[1] - Choosing a JDBC Driver,WebLogic, Online, 19.5.1997
<http://www.weblogic.com/whitepapers/jdbc.html>
[2] - THE JDBC(TM) DATABASE ACCESS API, Sun Microsystems
Inc, Online 13.10.1997
<http://java.sun.com/products/jdbc/index.html>
[3] - Integrating Databases with Java via JDBC, JavaWorld
5/1996, Rawn Shah, Online
<http://www.javaworld.com/javaworld/jw-05-1996/jw-05-shah.html>
[4] - The X/Open SQL Call Level Interface, X/Open
Company LTD, Online, 1995
<http://www.rdg.opengroup.org/public/tech/datam/cli.htm>
[5] - The JDBC Connection, DBMS Magazine 10/1996,
David S. Linthicum, Online
<http://www.dbmsmag.com/9610i06.html>
[6] - JDBC(TM) Drivers, Sun Microsystems Inc, Online,
13.10.1997
<http://java.sun.com/products/jdbc/jdbc.drivers.html>
[7] - JDBC Frequently Asked Questions,
<http://javanese.yoyoweb.com/JDBC/FAQ.txt>
[8] - Access to Relational Data from Java: JDBC and
JSQL, Oracle Corp, Online, March 1997
<http://www.oracle.com/nca/java_nca/html/jsql_jdbc_wp.html>
[9] - JDBC(TM): A Java SQL API Version 1.20, JavaSoft,
Graham Hamilton & Rick Cattell, 10.1.1997
<ftp://ftp.javasoft.com/pub/jdbc/jdbc-spec-0120.pdf>
Lisätietoja
JAVA DOCUMENTATION, JavaSoft Inc (***)
<http://www.javasoft.com/docs/index.html>
JAVA 1.0.2 API DOCUMENTATION, JavaSoft Inc (***)
<http://java.sun.com/products/jdk/1.0.2/apidocs.html>
Java Programming Databases, Gamelan (****)
<http://java.developer.com/pages/Gamelan.programming.db.html>
Java Info, Visus Technologies Inc.(***)
<http://www.vtiscan.com/java.html>
Registry of Values for SQL/CLI, OpenGroup (*)
<http://www.rdg.opengroup.org/infosrv/SQL_Registry/registry.txt>
ODBC 3.0 - Features, Microsoft Corp. (*)
<http://www.microsoft.com/products/prodref/264_newf.htm>
ODBC 3.0 - Overview, Microsoft Corp. (*)
<http://www.microsoft.com/products/prodref/264_ov.htm>
<mika.uusitalo@hut.fi>