Upotettu SQL Ohjelmoitaessa 3GL kielillä, käytetään relaatiotietokantaa yleensä esikääntäjien avulla. Tietokannan valmistaja toimittaa funktiokirjaston, jota esikääntäjän avulla hyödynnetään. Ongelmaksi muodostuu tällöin se, että eri tietokantavalmistajien funktiokirjastot eivät ole yhteensopivia, vaan ohjelmat tulee kääntää ja mahdollisesti modifioida siirryttäessä tietokantaympäristöstä toiseen, sama toimnepide täytyy tehdä toisinaan myös siirryttäessä saman tuotteen tietokantaversiosta toiseen. SQL-editor SQLkomento Isäntäkielen ohjelmointi: ohjelmaan lisätään myös SQL esikäännös, jolloin koodiin liitetään SQL- osuuden vaatimat funktiokutsut lähdekoodi+call-lauseet käännös TIETOKANTA käännösvaiheessa tarkasettaan objelmamoduulit.... SQLkirjasto linkitys suoritettava ohjelma Esimerkki SQLn käytöstä COBOL ohjelmassa MOVE -1 TO palkka-ilm MOVE 0 TO kun-ilm... EXEC SQL INSERT INTO HH.TYONTEK (tt_no, nimi, kotikunta, postinumero, palkka) VALUES (:TT-NO, :NIMI, :KUNTA :kun-ilm, :POSTINRO, :PALKKA :palkka-ilm) END-EXEC IF SQLCODE NOT = 0...
ODBC (Open Database Connectivity) Microsoftin toteuttama ODBC- rajapinta relaatiotietokantojen käyttämiseksi on toteutus X/OPEN Sql Access Group (SAG) määrittelemästä SQL CLI standardista. Standardin tarkoitus on yksinkertaistaa tietokantojen käyttöä sovellusohjelman kannalta. ODBC-rajapintaa käyttämällä ohjelmaa tehtäessä ei tarvitse periaatteessa tietää, minkä valmistajan relaatiokantaa käytetään, vaan sovellus käyttää kaikkia kantoja samalla tavoin. Tietokantatuotteiden valmistajat (tai muut ohjelmistotuottajat) puolestaan valmistavat toimivat ajurit erikseen kullekin tietokantatuotteelle. Sovellusohjelmat käyttävät ODBC.DDL:n tarjoamaa rajapintaa. ODBC-ajurit huolehtivat siitä, että eri tietokantatuotteiden erityisominaisuudet otetaan huomioon; niiden tulee esimerkiksi muuntaa ODBC-määrittelyn mukaiset funktiot tietokantatuotteessa oleviksi vastaaviksi funktioiksi, koska eri tietokantatuotteissa on samoja toimintoja tekevillä funktioilla eri nimiä. Ajurit tekevät myös tiedon esitystapojen eroista johtuvat muunnokset. ODBC- ajurit huolehtivat lisäksi tietokantayhteyksien luonneista ja puruista sekätapahtumakäsittelystä. FAP (Formats And Protocols) huolehtii verkkoyhteyksistä kunkin tuotteen mukaisesti. DBMS- tietokantaohjelmat toteuttavat ODBC-rajapinnan kautta ohjelmoidut toimenpiteet riippuen siitä, mitä toimintoja kanta tarjoaa. Jos kannan ominaisuuksiin ei kuulu jokin ODBC-rajapinnan mukainen toiminto, ei sitä tällöin voida toteuttaa.
ODBC määrittelee ajureille kaksi eri kyvykkyystasoa. Kirjassa on sivulla 498-499 SQL kieliopin mukainen luokittelu ja seuraavassa on ODBC APIn luokittelu CORE 0 taso: (Level 0, X/Open SAG CLI May92) Ympäristön (env.), yhteyden (connection) ja komennon (statm.) kahvat (handle) Yhteyden luonti; yhteyden aikana voidaan käsitellä useita komentoja SQL-komentojen parametrointi, kääntö ja suoritus (dynaaminen SQL) Tulosjoukon (result set) staattinen kohdistinkäsittely Tapahtumahallinta (Commit, Rollback) Virheilmaisintietojen käytettävyys LEVEL 1: ODBC-palvelutasotietojen ja tuettujen tietotyyppien luku (SQLGet..Info) Yhteystietojen ja komennon optioiden hallinta Sarakearvojen osien hallinta (tarpeen LONG- ja BLOB-tietomuodoissa) Talletusrakennetietojen luku ODBC-systeemitaulustosta LEVEL 2: Parametri- ja tulostaulukoiden käsittely Parametritietojen hallinta Ohjattava kohdistin Oikeus-, avain- ja proseduuritietojen luku Kohdejärjestelmälle muunnetun SQL-komennon luku Esimerkki (VB) Option Explicit Private Sub Form_Load() Dim db As Database Dim rs As Recordset Dim wk As Workspace Dim omavirhe As Error On Error GoTo Virhe Set wk = DBEngine.CreateWorkspace("", "", "", dbuseodbc) wk.defaultcursordriver = dbuseodbc Set db = wk.opendatabase("", False, False, "ODBC;DSN=MinunKanta") Set rs = db.openrecordset("select * from omataulu", dbopendynaset, _ 0, dboptimistic) rs.edit rs.fields("nimi") = "Muutos tähän" rs.update rs.movenext Exit Sub Virhe: MsgBox Errors.Count For Each omavirhe In Errors MsgBox VIRHE.numero & " " & omavirhe.description Next End Sub
ODBC:n käyttö Microsoft ympäristössä:
JDBC (Java Database Connectivity) Javakieleen on kehitetty JDBC, joka on ODBC-rajapintaa vastaava menettely. Jos jollekin tuotteelle ei ole olemassa JDBC-ajureita, voidaan JDBC toteuttaa myös tuotteelle olevan ODBC- ja javan ODBC-bridge ajureiden avulla. JDBC- ajureita voidaan käyttää vain java-kielessä. JDBC-yhteydet tietokantoihin voidaan luoda erilaisista javan toteutusympäristöistä, kuten sovelluksista (applications), sovelmista (applets), servleteistä, JSP:stä sekä JavaBeans- ja EJB-komponenteista.
Esimerkki:/* based on material in JDBC Tutorial by Sun import java.io.*; import java.sql.*; public class kasittely { public static void main (String args[]) throws Exception { java.sql.connection conn; java.sql.resultsetmetadata meta; java.sql.statement stmt; java.sql.resultset result; int i; Class.forName("solid.jdbc.SolidDriver"); System.out.println("Driver succesfully registered."); String scon = "jdbc:solid://localhost:1313/sql/sql"; // next, the connection is attempted conn = java.sql.drivermanager.getconnection(scon); try { String updatesales = "UPDATE COFFEES SET SALES = 75 WHERE COF_NAME = Colombian "; stmt= conn.createstatement(); stmt.executeupdate(updatesales); result = stmt.executequery("select * from COFFEES "); meta = result.getmetadata(); int cols = meta.getcolumncount();. // and finally, we dump the result set System.out.println("Starting to dump resultset."); int cnt = 1; while(result.next()) { System.out.print("\nRow "+cnt+" : "); for (i=1; i <= cols; i++) { System.out.print(result.getString(i)+"\t"); } cnt++; } result.close(); stmt.close(); } catch (SQLException ex) {