120 likes | 223 Views
4.2. Sulautettu (embedded) SQL. Ohjelmointikielen (ns. isäntäkielen ) laajennus ISO-standardi, määritelty kielille Ada, C, COBOL, Fortran, MUMPS, Pascal, PL/I Nimityksiä C:n SQL-laajennukselle: Pro*C (Oracle) , ECPG (PostgreSQL) Laajennetulle Javalle oma standardi: SQLJ
E N D
4.2. Sulautettu (embedded) SQL • Ohjelmointikielen (ns. isäntäkielen) laajennus • ISO-standardi, määritelty kielille Ada, C, COBOL, Fortran, MUMPS, Pascal, PL/I • Nimityksiä C:n SQL-laajennukselle: • Pro*C (Oracle), • ECPG (PostgreSQL) • Laajennetulle Javalle oma standardi: SQLJ • Laajennettu kieli vaatii esiprosessorin eli esikääntäjän 4.2-Sulautettu SQL Teuhola 2012
Laajennetun ohjelman käsittelyprosessi Ohjelma, jossa sekä SQL:ää että isäntäkieltä Esikääntäjä Isäntäkielinen ohjelma, jossa DBMS-moduulien kutsuja Isäntäkielen kääntäjä Käännetty ohjelma, jossaDBMS-moduulien kutsuja DBMS-ohjelmakirjasto Linkittäjä Suorituskelpoinen ohjelma 4.2-Sulautettu SQL Teuhola 2012
SQL:n kielellinen sulauttaminen • SQL-lauseiden syntaktinen erottelu isäntäkielen lauseista: • C+SQL: “EXEC SQL SELECT … FROM … WHERE …;“ • Java+SQL: #sql { SELECT … FROM … WHERE …}; • Yhteiset muuttujat: • Alkavat ‘:’-merkillä SQL-lauseissa • Isäntäkielen lauseissa ilman ‘:’-merkkiä 4.2-Sulautettu SQL Teuhola 2012
Poikkeustilanteet • Poikkeustilanteisiin varautuminen ja niiden käsittely asianmukaisesti ovat olennaisen tärkeä osa tietokantaohjelmointia. • C-kieli: Tietokantaoperaation jälkeen tarkistettava tilakoodin (SQLCODE tai SQLSTATE) arvo, joka kertoo, miten kävi. • Java: Käytetään normaalia poikkeusten sieppausta (tässä erityisesti SQLException). 4.2-Sulautettu SQL Teuhola 2012
SQLJ • Javaan sulautettu SQL • Kehittäjinä Oracle, IBM, Tandem, Informix ja Sybase • ANSI:n ja ISO:n standardi (ISO/IEC 9075-10) • Ei näytä yleistyneen käytännössä;(siksi tässä vain lyhyt esittely). 4.2-Sulautettu SQL Teuhola 2012
SQLJ: kyselyesimerkki Henkilön nimen haku henkilötunnuksella: String enimi, snimi, hetu;hetu = “123456789”;try { #sql { SELECT Etunimi, SukunimiINTO :enimi, :snimiFROM Henkilot WHERE Hetu = :hetu };}catch (SQLException sqlex) { …} 4.2-Sulautettu SQL Teuhola 2012
SQLJ: Päivitysesimerkki • Sulautetuissa lauseissa voi olla sekä Java-muuttujia että -lausekkeita, esim. osoitteenmuutos, jossa uusi osoite kysytään käyttäjältä itse kirjoitetulla funktiolla ‘kysy’:String e = “Ewert”;String s = “Kupiainen”;try {#sql {UPDATE HenkilotSET Osoite = :kysy(“Anna uusi osoite”)WHERE Etunimi = :e and Sukunimi = :s}catch (SQLException sqlex) { …} 4.2-Sulautettu SQL Teuhola 2012
SQLJ: Rivijoukon käsittely • Iteraattori (tässä ns. named iterator), esim.#sql public iterator HenkiloIter(String hetu, String nimi);määrittelee automaattisesti iteraattoriluokan HenkiloIter,jolla on metodit • Boolean next() • String hetu() • String nimi() • void close() 4.2-Sulautettu SQL Teuhola 2012
SQLJ: Rivijoukon käsittely (jatk.) • Iteraattorin käyttöesimerkki: Tietyllä paikkakunnalla asuvien henkilöiden listausString os = kysy(“Anna paikka jonka henkilöt listataan”);try {#sql iterator HenkiloIter(String hetu, String nimi); HenkiloIter h = null;#sql h = { SELECT hetu, nimi FROM HenkilotWHERE paikka = :os };while h.next() { System.out.println(h.hetu() + ” “ + h.nimi() + …); } h.close();} catch (SQLException sqlex) { …} 4.2-Sulautettu SQL Teuhola 2012
SQLJ: Esim. palkankorotusiteraattori // Eri henkilöille voi tulla erisuuri korotus. try {#sql iterator UpdateIter implements sqlj.runtime.ForUpdate (String hetu, int palkka); UpdateIter ui = null;#sql ui = { SELECT * FROM Henkilot };while (ui.next()) { int koro = kysy(“Mikä korotus henkilölle ” + ui.hetu());#sql { UPDATE HenkilotSET palkka = palkka + :koroWHERE CURRENT OF :ui }; } ui.close();} catch (SQLException sqlex) { …} // Yleinen SQL-poikkeus 4.2-Sulautettu SQL Teuhola 2012
SQLJ vs. ohjelmointirajapinta (JDBC) • Vaihtoehtoisia tekniikoita • SQLJ periaatteessa tehokkaampi (käännösaikainen jäsennys ja optimointi), mutta monet esikääntäjät generoivat JDBC-kutsuja. • SQLJ staattinen, JDBC dynaaminen. • SQLJ-ohjelmat lyhyempiä ja (ehkä) helpompia laatia. 4.2-Sulautettu SQL Teuhola 2012
Yhteenveto sulautetusta SQL:stä • Perinteinen vaihtoehto tietokantasovellusten toteuttamiseen. • Isäntäkieli antaa ohjelmointiympäristön, mutta SQL:n sovitus hieman kankeaa. • Useampia standardeja, osittain riippuen isäntäkielestä (C, Java, …). • Tässä kurssissa tarkastelu oli esimerkinomainen. 4.2-Sulautettu SQL Teuhola 2012