embedded SQL en JDBC
date post
19-Jan-2015Category
Education
view
1.480download
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