embedded SQL en JDBC

Click here to load reader

  • date post

    19-Jan-2015
  • Category

    Education

  • view

    1.480
  • download

    0

Embed Size (px)

description

 

Transcript of embedded SQL en JDBC

  • 1. programmas verbinden met gegevensbanken Katrien Verbert [email_address]

2. inhoud

  • benaderingen voor gegevensbankprogrammeren
  • ingebedde SQL
  • JDBC

3. gebruik van SQL

  • Interactief
    • opdracht wordt aangeboden en onmiddellijk uitgevoerd
  • Ingebed gebruik
    • SQL wordt gebruikt in een programma

4. programmeren met gegevensbanken gebruikers applicaties gegevensbanken SQL C/C++, Java, PHP, Perl... 5. programmeren met gegevensbanken

  • SQL is beperkter in uitdrukkingskracht dan een algemene programmeertaal
  • de te nemen actie op de gegevensbank is niet altijd vooraf gekend
  • resultaten van SQL queries moeten soms verder verwerkt worden, inrapporten gepresenteerd, enz.

6. benaderingen

  • inbedden SQL opdrachten in een programma
    • SQL opdrachten worden door een precompiler opgezocht
    • en omgevormd tot functie-aanroepen van de programmeertaal
  • gebruik van een bibliotheek met functies
    • die toegang verschaffen tot de gegevensbank
    • en resultaten beschikbaar stellen aan een programma in een API
  • een (nieuwe) programmeertaal ontwikkelen
    • die compatibel is met het gegevensmodel en query taal
    • vb: PL/SQL van Oracle

7. SQL/Host Language Interface Function call SQL Library host program DBMS Fetch rowsfrom the cursorWhile(){ } Impedance mismatch problem [Kazuhiro Minami] SQL stmt Table Cursor 8. Impedance mismatch

  • verschillen tussen gegevensmodel en model van de programmeertaal
    • CHAR, VARCHAR--String
    • INTEGER-- int
  • bindings voor verschillende programmeertalen
    • definieert overeenkomsten van de attribuuttypes met de types in de programmeertaal
    • bindt resultaat van query (=verzameling van tuples) aan datastructuur van het programma

9. typische interactie client/server model

  • het client programma opent een verbinding met de gegevensbankserver
    • vereist meestal adres van machine met de server,
    • en login-naam en paswoord voor gegevensbank
  • Interactie tussen het programma en de gegevensbank:
    • programma biedt queries, updates, aan
    • server levert resultaten van de queries,
  • Programma sluit de verbinding met de gegevensbank

10. INGEBEDDE SQL 11. ingebedde SQL

  • SQL opdracht kan in een programma ingebed worden
  • een pre-compiler verwerkt de SQL opdrachten vr de compilatie van het programma:
    • SQL opdrachten worden vervangen door opdrachten (declaraties en functie-aanroepen) in de programmeertaal
  • syntaxis verschilt wat naargelang van de programmeertaal

EXEC SQL< embedded SQL statement >END-EXEC EXEC SQL< embedded SQL statement >; # SQL{ < embedded SQL statement > }; 12. ingebedde SQL

    • Connecteren met de gegevensbank:
      • slechts n connectie kan actief zijn;
      • wijzigen van de actieve connectie:
    • Verbinding beindigen:

CONNECT TO< server name >AS< connection name > AUTHORIZATION< user account name and password > ; DISCONNECT< connection name > ; SET CONNECT< connection name > ; 13. Ingebed gebruik van SQL

  • gemeenschappelijke variabelen
    • SQL opdrachten kunnen verwijzingen naar variabelen uit het programma bevatten
    • dubbele punt (:) als prefix
  • de gemeenschappelijke variabelen moeten gedeclareerd worden in een SQLdeclaratie sectie

14. ingebedde SQL

  • En tupel ophalen uit een gegevensbank
  • Voorbeelden:
    • 1.Declaratievan variabelen (in C):

EXEC SQL BEGIN DECLARE SECTION; varchar dname[16], fname[16], lname[16],char ssn[10], bdate[11], sex[2], minit[2]; float salary, raise; int dno, dnumer;int SQLCODE ; char SQLSTATE[6]; EXEC SQL END DECLARE SECTION; 15. ingebedde SQL: voorbeeld

    • Herhaal een aantal maal: lees het ssn van een werknemer en schrijf (op de uitvoer) gegevens van die werknemer

loop = 1; while (loop) { prompt(Enter a social security number: , ssn); EXEC SQL select Fname, Minit, Lname, Address, Salary into :fname, :minit, :lname, :address, :salary from EMPLOYEE where SSN = :ssn; if (SQLCODE == 0)printf(fname, minit, lname, address, salary) else printf(social sec. numb. does not exist: , ssn); prompt(More s.s.numbers (enter 1 for Yes, 0 for No): , loop) ; } 16. twee aanpakken Host language + Embedded SQL Preprocessor Host language + Function calls Host-language compiler Object-code program SQL library CLI (Call-level interface) 17. communicatie tussen programma en DBMS

  • metde communicatie-variabelen
  • SQLCODE (oudste)
    • integer variabele
    • waarde na uitvoering van een SQL opdracht :
      • = 0 met succes uitgevoerd
      • > 0 speciale toestand,
      • bv100 : geen records beschikbaar in query resultaat
      • < 0 een fout is opgetreden
  • SQLSTATE (in latere versies van standaard toegevoegd)
    • string van 5 tekens
    • waarde na uitvoering van SQL opdracht:
      • 00000 geen fout of uitzonderingstoestand
      • 02000 geen gegevens meer

18. SQLJ

  • SQL commandos ingebed in Java
    • SQLJ vertaler zet SQL commandos om in Java,
    • commandos worden uitgevoerd d.m.v. de JDBC interface
    • JDBC driver moet dus genstalleerd worden
  • vereist:
    • importeren van verscheidene klassen
      • JDBC en IO klassen
      • extra klassen
    • connecteren met de gewenste gegevensbank
      • getConnection

19. SQLJ embedded SQL voor Java Marina G. Erechtchoukova SQLJ Source SQLJ Translator Java Source javac Class file JDBC Database 20. SQLJ

    • importeren van de nodige klassen (vb. met Oracle)
    • connectie maken

import java.sql.*; import java.io.*; import sqlj.runtime.*; import sqlj.runtime.ref.*; import oracle.sqlj.runtime.*; DefaultContext cntxt = oracle.getConnection(, , , true); DefaultContext.setDefaultContext(cntxt); 21. SQLJ

    • Voorbeeld 1:
      • lees het ssn van een werknemer en schrijf (op de uitvoer) gegevens van die werknemer

ssn = readEntry(Enter a social security number: ); try { #sql{select Fname, Minit, Lname, Address, Salary into :fname, :minit, :lname, :address, :salary from EMPLOYEE where Ssn = :ssn}; }catch (SQLException se) { System.out.println(s.s.number does not exist: + ssn); return ; } System.out.println(fname + + minit + + lname + + + salary) 22. dname = readEntry(Enter the department name: ); try { #sql{select Dnumber into :dnumber from DEPARTMENT where Dname = :dname}; }catch (SQLException se) { System.out.println(department does not exist: + dname); return; } System.out.println( information for department: + dname); #sql iterator Emp(String ssn, String fname, String minit,String lname, double salary); Emp e = null; #sql e = {select ssn, fname, minit, lname, salary from EMPLOYEE where Dno = :dnumber}; while (e.next()) { System,out.println(e.ssn + e.fname + +e.minit + + e.lname + + e.salary); } ; e.close() ; 23. JDBC 24. JDBC

  • Call function interface voor toegang vanuit Java
  • SQL statements worden dynamisch aangemaakt en doorgegeven als string
  • Gebruikt API voor toegang tot DBMS

25. twee aanpakken Host language + Embedded SQL Preprocessor Host language + Function calls Host-language compiler Object-code program SQL library JDBC 26. JDBC

  • gestandaardiseerde API (Application Programming Interface)
    • geregistreerde naam door Sun Microsystems
    • Zou niet staan voor Java DataBase Connectivity
    • JDBC driver = een implementatie van de functie-aanroepen die gespecificeerd zijn in de JDBC API
  • DBMS leveranciers bieden JDBC drivers aan zodat het mogelijk wordt om gegevensbanken vanuit een Java programma aan te spreken

27. JDBC arch