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:

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:

Muita eniten käytettyjä luokkia ovat: 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:

  1. 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)
  2. Tietokantaspesifinen API-JDBC-ajuri: ajuri tulkkaa JDBC-kutsut natiiviksi tietokantakutsuksi tietokannan "omassa" API-muodossa
  3. 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.
  4. 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:

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:

 

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.
 


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>