1 / 12

4.2. Sulautettu (embedded) SQL

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

sela
Download Presentation

4.2. Sulautettu (embedded) SQL

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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

  2. 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

  3. 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

  4. 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

  5. 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

  6. 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

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

  8. 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

  9. 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

  10. 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

  11. 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

  12. 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

More Related