programma’s verbinden met gegevensbanken Katrien Verbert [email_address]
inhoud <ul><li>benaderingen voor gegevensbankprogrammeren </li></ul><ul><li>ingebedde SQL </li></ul><ul><li>JDBC </li></ul>
gebruik van SQL <ul><li>Interactief </li></ul><ul><ul><li>opdracht wordt aangeboden en onmiddellijk uitgevoerd </li></ul><...
programmeren met gegevensbanken gebruikers applicaties gegevensbanken SQL C/C++, Java, PHP, Perl...
programmeren met gegevensbanken <ul><li>SQL is beperkter in uitdrukkingskracht dan een algemene programmeertaal </li></ul>...
benaderingen <ul><li>inbedden SQL opdrachten in een programma </li></ul><ul><ul><li>SQL opdrachten worden door een precomp...
SQL/Host Language Interface Function call SQL Library host program DBMS Fetch rows  from the cursor  While(…){ } Impedance...
Impedance mismatch <ul><li>verschillen tussen gegevensmodel en model van de programmeertaal </li></ul><ul><ul><li>CHAR, VA...
typische interactie client/server model <ul><li>het client programma opent een verbinding met de gegevensbankserver </li><...
INGEBEDDE SQL
ingebedde SQL <ul><li>SQL opdracht kan in een programma ingebed worden  </li></ul><ul><li>een pre-compiler verwerkt de SQL...
ingebedde SQL <ul><ul><li>Connecteren met de gegevensbank: </li></ul></ul><ul><ul><ul><li>slechts één connectie kan actief...
Ingebed gebruik van SQL <ul><li>gemeenschappelijke variabelen </li></ul><ul><ul><li>SQL opdrachten kunnen verwijzingen naa...
ingebedde SQL <ul><li>Eén tupel ophalen uit een gegevensbank </li></ul><ul><li>Voorbeelden: </li></ul><ul><ul><li>1.  Decl...
ingebedde SQL: voorbeeld <ul><ul><li>Herhaal een aantal maal: lees het ssn van een werknemer en schrijf (op de uitvoer) ge...
twee aanpakken Host language + Embedded SQL Preprocessor Host language + Function calls Host-language compiler Object-code...
communicatie tussen programma en DBMS <ul><li>met  de communicatie-variabelen </li></ul><ul><li>SQLCODE (oudste) </li></ul...
SQLJ <ul><li>SQL commando’s ingebed in Java </li></ul><ul><ul><li>SQLJ vertaler zet SQL commando’s om in Java,  </li></ul>...
SQLJ – embedded SQL voor Java Marina G. Erechtchoukova SQLJ Source SQLJ Translator Java Source javac Class file JDBC Datab...
SQLJ <ul><ul><li>importeren van de nodige klassen (vb. met Oracle) </li></ul></ul><ul><ul><li>connectie maken </li></ul></...
SQLJ <ul><ul><li>Voorbeeld 1:  </li></ul></ul><ul><ul><ul><li>lees het ssn van een werknemer en schrijf (op de uitvoer) ge...
dname = readEntry(“Enter the department name: “); try { #sql{select Dnumber into :dnumber from DEPARTMENT where Dname = :d...
JDBC
JDBC <ul><li>Call function interface voor toegang vanuit Java </li></ul><ul><li>SQL statements worden dynamisch aangemaakt...
twee aanpakken Host language + Embedded SQL Preprocessor Host language + Function calls Host-language compiler Object-code...
JDBC <ul><li>gestandaardiseerde API (Application Programming Interface) </li></ul><ul><ul><li>geregistreerde naam door Sun...
JDBC architectuur <ul><li>Java code roept JDBC library aan </li></ul><ul><li>JDBC laadt een  driver   </li></ul><ul><li>Dr...
JDBC Driver <ul><li>PostgreSQL:  http://jdbc.postgresql.org/ </li></ul><ul><li>Oracle: zie Toledo  </li></ul>
DriverManager klasse <ul><li>een programma kan connecteren met verschillende gegevensbanken </li></ul><ul><li>de klasse Dr...
stappen in JDBC gebruik <ul><li>importeer het  java.sql pakket </li></ul><ul><li>laad en registreer de driver </li></ul><u...
1. importeer het  java.sql pakket <ul><li>of </li></ul>import java.sql.*; import java.sql.Connection; import java.sql.SQLE...
 
2. laad en registreer de driver <ul><li>dit gebeurt d.m.v. de klasse DriverManager </li></ul><ul><li>laden van een specifi...
2. laad en registreer de driver <ul><li>alternatief:  </li></ul><ul><ul><li>gebruik de generieke Java functie om een klass...
 
JDBC gebruik <ul><li>3. zorg voor de passende variabelen in Java </li></ul>public class Department { private String dname;...
 
3. maak een connectie met de gegevensbank <ul><li>gebruik de statische methode  getConnection()  uit de klasse DriverManag...
<ul><li>URL </li></ul><ul><ul><li>jdbc:postgresql:database </li></ul></ul><ul><ul><li>jdbc:postgresql://host/database </li...
 
5. creëer een opdracht  <ul><li>Statement object </li></ul>Statement stmt = con.createStatement(); vb: een tabel Departmen...
? : parameter,
7. voer de opdracht uit <ul><li>executeQuery </li></ul><ul><li>executeUpdate </li></ul>try{ stmt.executeUpdate ( &quot; IN...
Opdrachten <ul><li>ResultSet  executeQuery (String sql_query) </li></ul><ul><ul><li>Voert de query  sql_query  uit en geef...
7. haal het resultaat (of de resultaten) op <ul><li>het resultaat wordt teruggegeven in een object van het type  ResultSet...
1, 2: attribuutposities, als alternatrief voor de attribuutnamen   binding van 1-ste parameter met ssn
JDBC gebruik <ul><li>sluit de opdracht en de connectie </li></ul><ul><ul><ul><li>(ook resultset(s) moeten worden afgeslote...
JDBC: overzicht van acties DriverManager Connection Statement ResultSet getConnection createStatement execute
Gebruik van ResultSets <ul><li>navigatie in een ResultSet </li></ul><ul><ul><ul><li>next() </li></ul></ul></ul><ul><ul><ul...
metadata <ul><ul><li>data die de structuur en de eigenschappen van de gegevens beschrijven </li></ul></ul><ul><ul><li>java...
Verschillende types opdrachten <ul><li>verschillende types </li></ul><ul><ul><li>java.sql.Statement </li></ul></ul><ul><ul...
java.sql.Statement <ul><li>meest gebruikt type opdracht </li></ul><ul><ul><li>v.b.  Connection con = …; Statement stmt = c...
java.sql.PreparedStatement <ul><ul><li>gebruikt voor de uitvoering van dynamische SQL opdrachten </li></ul></ul><ul><ul><u...
java.sql.PreparedStatement <ul><ul><li>hoe worden SQL statements uitgevoerd? </li></ul></ul><ul><ul><ul><li>de gebruiker v...
Upcoming SlideShare
Loading in...5
×

embedded SQL en JDBC

1,514

Published on

Published in: Education, Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,514
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
145
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide
  • Copyright © 1997 Alex Chaffee
  • Query geeft resultset rs terug Stelt een tweedimensionale rij voor of een table met tuples als rijen en attributen als kolommen Gelijkaardig aan een iterator in sqlj Wanneer een query uitgevoerd is, verwijst rs naar het tuple voor het eerste tuple van het resultaat r.Next wordt volgende tuple opgevraagd en geeft null terug als er geen tuples meer zijn Attributen kunnen opgevraagd worden met getfunctie, afhankelijk is van het type van het attribuut Attributen kunnen aangeduid worden door het opgeven van de positie of de naam van het attribuut In dit voorbeeld wordt een enkel tuple geselecteerd
  • embedded SQL en JDBC

    1. 1. programma’s verbinden met gegevensbanken Katrien Verbert [email_address]
    2. 2. inhoud <ul><li>benaderingen voor gegevensbankprogrammeren </li></ul><ul><li>ingebedde SQL </li></ul><ul><li>JDBC </li></ul>
    3. 3. gebruik van SQL <ul><li>Interactief </li></ul><ul><ul><li>opdracht wordt aangeboden en onmiddellijk uitgevoerd </li></ul></ul><ul><li>Ingebed gebruik </li></ul><ul><ul><li>SQL wordt gebruikt in een programma </li></ul></ul>
    4. 4. programmeren met gegevensbanken gebruikers applicaties gegevensbanken SQL C/C++, Java, PHP, Perl...
    5. 5. programmeren met gegevensbanken <ul><li>SQL is beperkter in uitdrukkingskracht dan een algemene programmeertaal </li></ul><ul><li>de te nemen actie op de gegevensbank is niet altijd vooraf gekend </li></ul><ul><li>resultaten van SQL queries moeten soms verder verwerkt worden, in rapporten gepresenteerd, enz. </li></ul>
    6. 6. benaderingen <ul><li>inbedden SQL opdrachten in een programma </li></ul><ul><ul><li>SQL opdrachten worden door een precompiler opgezocht </li></ul></ul><ul><ul><li>en omgevormd tot functie-aanroepen van de programmeertaal </li></ul></ul><ul><li>gebruik van een bibliotheek met functies </li></ul><ul><ul><li>die toegang verschaffen tot de gegevensbank </li></ul></ul><ul><ul><li>en resultaten beschikbaar stellen aan een programma in een API </li></ul></ul><ul><li>een (nieuwe) programmeertaal ontwikkelen </li></ul><ul><ul><li>die compatibel is met het gegevensmodel en query taal </li></ul></ul><ul><ul><li>vb: PL/SQL van Oracle </li></ul></ul>
    7. 7. SQL/Host Language Interface Function call SQL Library host program DBMS Fetch rows from the cursor While(…){ } Impedance mismatch problem [Kazuhiro Minami] SQL stmt Table Cursor
    8. 8. Impedance mismatch <ul><li>verschillen tussen gegevensmodel en model van de programmeertaal </li></ul><ul><ul><li>CHAR, VARCHAR -- String </li></ul></ul><ul><ul><li>INTEGER -- int </li></ul></ul><ul><li>bindings voor verschillende programmeertalen </li></ul><ul><ul><li>definieert overeenkomsten van de attribuuttypes met de types in de programmeertaal </li></ul></ul><ul><ul><li>bindt resultaat van query (=verzameling van tuples) aan datastructuur van het programma </li></ul></ul>
    9. 9. typische interactie client/server model <ul><li>het client programma opent een verbinding met de gegevensbankserver </li></ul><ul><ul><li>vereist meestal adres van machine met de server, </li></ul></ul><ul><ul><li>en login-naam en paswoord voor gegevensbank </li></ul></ul><ul><li>Interactie tussen het programma en de gegevensbank: </li></ul><ul><ul><li>programma biedt queries, updates,… aan </li></ul></ul><ul><ul><li>server levert resultaten van de queries,… </li></ul></ul><ul><li>Programma sluit de verbinding met de gegevensbank </li></ul>
    10. 10. INGEBEDDE SQL
    11. 11. ingebedde SQL <ul><li>SQL opdracht kan in een programma ingebed worden </li></ul><ul><li>een pre-compiler verwerkt de SQL opdrachten vóór de compilatie van het programma: </li></ul><ul><ul><li>SQL opdrachten worden vervangen door opdrachten (declaraties en functie-aanroepen) in de programmeertaal </li></ul></ul><ul><li>syntaxis verschilt wat naargelang van de programmeertaal </li></ul>EXEC SQL < embedded SQL statement > END-EXEC EXEC SQL < embedded SQL statement > ; # SQL { < embedded SQL statement > } ;
    12. 12. ingebedde SQL <ul><ul><li>Connecteren met de gegevensbank: </li></ul></ul><ul><ul><ul><li>slechts één connectie kan actief zijn; </li></ul></ul></ul><ul><ul><ul><li>wijzigen van de actieve connectie: </li></ul></ul></ul><ul><ul><li>Verbinding beëindigen: </li></ul></ul>CONNECT TO < server name > AS < connection name > AUTHORIZATION < user account name and password > ; DISCONNECT < connection name > ; SET CONNECT < connection name > ;
    13. 13. Ingebed gebruik van SQL <ul><li>gemeenschappelijke variabelen </li></ul><ul><ul><li>SQL opdrachten kunnen verwijzingen naar variabelen uit het programma bevatten </li></ul></ul><ul><ul><li>dubbele punt (:) als prefix </li></ul></ul><ul><li>de gemeenschappelijke variabelen moeten gedeclareerd worden in een SQL declaratie sectie </li></ul>
    14. 14. ingebedde SQL <ul><li>Eén tupel ophalen uit een gegevensbank </li></ul><ul><li>Voorbeelden: </li></ul><ul><ul><li>1. Declaratie van variabelen (in C): </li></ul></ul>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. 15. ingebedde SQL: voorbeeld <ul><ul><li>Herhaal een aantal maal: lees het ssn van een werknemer en schrijf (op de uitvoer) gegevens van die werknemer </li></ul></ul>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. 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. 17. communicatie tussen programma en DBMS <ul><li>met de communicatie-variabelen </li></ul><ul><li>SQLCODE (oudste) </li></ul><ul><ul><li>integer variabele </li></ul></ul><ul><ul><li>waarde na uitvoering van een SQL opdracht : </li></ul></ul><ul><ul><ul><li>= 0 met succes uitgevoerd </li></ul></ul></ul><ul><ul><ul><li>> 0 speciale toestand, </li></ul></ul></ul><ul><ul><ul><li>bv 100 : geen records beschikbaar in query resultaat </li></ul></ul></ul><ul><ul><ul><li>< 0 een fout is opgetreden </li></ul></ul></ul><ul><li>SQLSTATE (in latere versies van standaard toegevoegd) </li></ul><ul><ul><li>string van 5 tekens </li></ul></ul><ul><ul><li>waarde na uitvoering van SQL opdracht: </li></ul></ul><ul><ul><ul><li>“ 00000” geen fout of uitzonderingstoestand </li></ul></ul></ul><ul><ul><ul><li>“ 02000” geen gegevens meer </li></ul></ul></ul><ul><ul><ul><li>… </li></ul></ul></ul>
    18. 18. SQLJ <ul><li>SQL commando’s ingebed in Java </li></ul><ul><ul><li>SQLJ vertaler zet SQL commando’s om in Java, </li></ul></ul><ul><ul><li>commando’s worden uitgevoerd d.m.v. de JDBC interface </li></ul></ul><ul><ul><li>JDBC driver moet dus geïnstalleerd worden </li></ul></ul><ul><li>vereist: </li></ul><ul><ul><li>importeren van verscheidene klassen </li></ul></ul><ul><ul><ul><li>JDBC en IO klassen </li></ul></ul></ul><ul><ul><ul><li>extra klassen </li></ul></ul></ul><ul><ul><li>connecteren met de gewenste gegevensbank </li></ul></ul><ul><ul><ul><li>getConnection </li></ul></ul></ul>
    19. 19. SQLJ – embedded SQL voor Java Marina G. Erechtchoukova SQLJ Source SQLJ Translator Java Source javac Class file JDBC Database
    20. 20. SQLJ <ul><ul><li>importeren van de nodige klassen (vb. met Oracle) </li></ul></ul><ul><ul><li>connectie maken </li></ul></ul>import java.sql.*; import java.io.*; import sqlj.runtime.*; import sqlj.runtime.ref.*; import oracle.sqlj.runtime.*; … DefaultContext cntxt = oracle.getConnection(“<url name>”, “ <user name>”, “<pasword>”, true); DefaultContext.setDefaultContext(cntxt); …
    21. 21. SQLJ <ul><ul><li>Voorbeeld 1: </li></ul></ul><ul><ul><ul><li>lees het ssn van een werknemer en schrijf (op de uitvoer) gegevens van die werknemer </li></ul></ul></ul>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. 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. 23. JDBC
    24. 24. JDBC <ul><li>Call function interface voor toegang vanuit Java </li></ul><ul><li>SQL statements worden dynamisch aangemaakt en doorgegeven als string </li></ul><ul><li>Gebruikt API voor toegang tot DBMS </li></ul>
    25. 25. twee aanpakken Host language + Embedded SQL Preprocessor Host language + Function calls Host-language compiler Object-code program SQL library JDBC
    26. 26. JDBC <ul><li>gestandaardiseerde API (Application Programming Interface) </li></ul><ul><ul><li>geregistreerde naam door Sun Microsystems </li></ul></ul><ul><ul><li>Zou niet staan voor ‘Java DataBase Connectivity’ </li></ul></ul><ul><ul><li>JDBC driver = een implementatie van de functie-aanroepen die gespecificeerd zijn in de JDBC API </li></ul></ul><ul><li>DBMS leveranciers bieden JDBC drivers aan zodat het mogelijk wordt om gegevensbanken vanuit een Java programma aan te spreken </li></ul>
    27. 27. JDBC architectuur <ul><li>Java code roept JDBC library aan </li></ul><ul><li>JDBC laadt een driver </li></ul><ul><li>Driver spreekt met een gegevensbank </li></ul>Copyright © 1997 Alex Chaffee Application JDBC Driver
    28. 28. JDBC Driver <ul><li>PostgreSQL: http://jdbc.postgresql.org/ </li></ul><ul><li>Oracle: zie Toledo </li></ul>
    29. 29. DriverManager klasse <ul><li>een programma kan connecteren met verschillende gegevensbanken </li></ul><ul><li>de klasse DriverManager houdt bij welke drivers geïnstalleerd zijn </li></ul><ul><li>enkele (statische) methodes van DriverManager zijn: </li></ul><ul><ul><li>getDriver, registerDriver, deregisterDriver,… </li></ul></ul>
    30. 30. stappen in JDBC gebruik <ul><li>importeer het java.sql pakket </li></ul><ul><li>laad en registreer de driver </li></ul><ul><li>zorg voor passende variabelen in Java </li></ul><ul><li>maak een connectie met de gegevensbank </li></ul><ul><li>creëer een opdracht </li></ul><ul><li>voer de opdracht uit </li></ul><ul><li>haal het resultaat (of de resultaten) op </li></ul><ul><li>sluit de opdracht en de connectie </li></ul>
    31. 31. 1. importeer het java.sql pakket <ul><li>of </li></ul>import java.sql.*; import java.sql.Connection; import java.sql.SQLException; import java.sql.DriverManager; import java.sql.Driver; import java.sql.Statement; import java.sql.ResultSet; … of
    32. 33. 2. laad en registreer de driver <ul><li>dit gebeurt d.m.v. de klasse DriverManager </li></ul><ul><li>laden van een specifieke driver gebeurt door de statische methode registerDriver() op te roepen </li></ul>DriverManager.registerDriver (new oracle.jdbc.driver.OracleDriver()); DriverManager.registerDriver (new org.postgresql.Driver());
    33. 34. 2. laad en registreer de driver <ul><li>alternatief: </li></ul><ul><ul><li>gebruik de generieke Java functie om een klasse te laden </li></ul></ul>Vb: Class.forName(“oracle.jdbc.driver.OracleDriver”);
    34. 36. JDBC gebruik <ul><li>3. zorg voor de passende variabelen in Java </li></ul>public class Department { private String dname; private String dnumber; private String mgrssn; private String mgrstartdate; public Department(String dname, String dnumber, String mgrssn, String mgrstartdate) { setDname(dname); setDnumber(dnumber); setMgrssn(mgrssn); setMgrstartdate(mgrstartdate); } public String getDname() { return dname; } }
    35. 38. 3. maak een connectie met de gegevensbank <ul><li>gebruik de statische methode getConnection() uit de klasse DriverManager om een connection object te maken </li></ul><ul><li>twee schrijfwijzen </li></ul><ul><ul><li>drie door komma’s gescheiden argumenten </li></ul></ul><ul><ul><li>een string als argument </li></ul></ul>Connection con = DriverManager.getConnection (url,”userName”,”password”);
    36. 39. <ul><li>URL </li></ul><ul><ul><li>jdbc:postgresql:database </li></ul></ul><ul><ul><li>jdbc:postgresql://host/database </li></ul></ul><ul><ul><li>jdbc:postgresql://host:port/database </li></ul></ul><ul><li>Voorbeeld: </li></ul>3. maak een connectie met de gegevensbank Connection con = DriverManager.getConnection (&quot;jdbc:postgresql:employee&quot;, &quot;postgres&quot;, ”pwd&quot;);
    37. 41. 5. creëer een opdracht <ul><li>Statement object </li></ul>Statement stmt = con.createStatement(); vb: een tabel Department maken: Statement stmt = con.createStatement(); String creeer= “CREATE TABLE Department (“ + “ Dname Varchar(15) Not Null,”+ “ Dnumber Integer Not Null,”+ “ MgrSsn Char(9),”+ “ MgrStartDate DATE,”+ “ PRIMARY KEY (Dnumber),”+ “ UNIQUE (Dname)”+ “ )”;
    38. 42. ? : parameter,
    39. 43. 7. voer de opdracht uit <ul><li>executeQuery </li></ul><ul><li>executeUpdate </li></ul>try{ stmt.executeUpdate ( &quot; INSERT INTO DEPARTMENT VALUES ( &quot; + quotes(d.getDname()) + &quot; , &quot; + d.getDnumber() + &quot; , &quot; + quotes(d.getMgrssn() )+ &quot; , &quot; + getDate(d.getMgrstartdate() )+ &quot; ) &quot; ); stmt.executeUpdate(&quot; COMMIT &quot;); } catch(SQLException sqle){ stmt.executeUpdate(&quot; ROLLBACK &quot;); throw new FailureNoticeException(sqle.getMessage()); } stmt.close();
    40. 44. Opdrachten <ul><li>ResultSet executeQuery (String sql_query) </li></ul><ul><ul><li>Voert de query sql_query uit en geeft een ResultSet object dat het resultaat van de query bevat. </li></ul></ul><ul><li>int executeUpdate (String sql_query) </li></ul><ul><ul><li>Voert de query sql_query uit en geeft als resultaat het aantal rijen dat werd toegevoegd/verwijderd/gewijzigd. </li></ul></ul>
    41. 45. 7. haal het resultaat (of de resultaten) op <ul><li>het resultaat wordt teruggegeven in een object van het type ResultSet </li></ul>ResultSet rs = stmt.executeQuery (&quot; SELECT dname, dnumber, mgrssn, mgrstartdate &quot; + &quot; FROM Department &quot; + &quot; WHERE dnumber = &quot; + number ); if (!rs.next()) throw new FailureNoticeException (&quot;Geen departement voldoet aan het zoekcriterium.&quot;); Department d = new Department(rs.getString(&quot;dname&quot;), rs.getString(&quot;dnumber&quot;), rs.getString(&quot;mgrssn&quot;), rs.getString(&quot;mgrstartdate&quot;)); rs.close();
    42. 46. 1, 2: attribuutposities, als alternatrief voor de attribuutnamen binding van 1-ste parameter met ssn
    43. 47. JDBC gebruik <ul><li>sluit de opdracht en de connectie </li></ul><ul><ul><ul><li>(ook resultset(s) moeten worden afgesloten) </li></ul></ul></ul>stmt.close(); con.close ();
    44. 48. JDBC: overzicht van acties DriverManager Connection Statement ResultSet getConnection createStatement execute
    45. 49. Gebruik van ResultSets <ul><li>navigatie in een ResultSet </li></ul><ul><ul><ul><li>next() </li></ul></ul></ul><ul><ul><ul><li>previous() </li></ul></ul></ul><ul><ul><ul><li>first() </li></ul></ul></ul><ul><ul><ul><li>last() </li></ul></ul></ul><ul><ul><ul><li>… </li></ul></ul></ul><ul><li>gegevens ophalen </li></ul><ul><ul><ul><li>getRow() </li></ul></ul></ul><ul><ul><ul><li>getString(int row) </li></ul></ul></ul><ul><ul><ul><li>getString(String attribuutnaam) </li></ul></ul></ul><ul><ul><ul><li>getLong(int row) </li></ul></ul></ul><ul><ul><ul><li>getDate(int row) </li></ul></ul></ul><ul><ul><ul><li>… </li></ul></ul></ul><ul><ul><ul><li>wasNull() </li></ul></ul></ul><ul><li>andere operaties </li></ul><ul><ul><ul><li>close() </li></ul></ul></ul>
    46. 50. metadata <ul><ul><li>data die de structuur en de eigenschappen van de gegevens beschrijven </li></ul></ul><ul><ul><li>java.sql.ResultSetMetaData </li></ul></ul><ul><ul><ul><li>construct by calling getMetaData() of a ResultSet object </li></ul></ul></ul><ul><ul><ul><li>getColumnCount() getColumnName(int i) getColumnSize(int i) getColumnType(int i) ... </li></ul></ul></ul>ResultSet rs = stmt.executeQuery(&quot;SELECT a, b, c FROM TABLE2&quot;); ResultSetMetaData rsmd = rs.getMetaData(); int numberOfColumns = rsmd.getColumnCount();
    47. 51. Verschillende types opdrachten <ul><li>verschillende types </li></ul><ul><ul><li>java.sql.Statement </li></ul></ul><ul><ul><li>java.sql.PreparedStatement </li></ul></ul><ul><ul><li>java.sql.CallableStatement </li></ul></ul>
    48. 52. java.sql.Statement <ul><li>meest gebruikt type opdracht </li></ul><ul><ul><li>v.b. Connection con = …; Statement stmt = con.createStatement(); </li></ul></ul><ul><li>hoe worden SQL statements uitgevoerd? </li></ul><ul><ul><li>de gebruiker voert een SQL opdracht in </li></ul></ul><ul><ul><li>het gevensbanksysteem ontleedt de opdracht </li></ul></ul><ul><ul><li>het gegevensbanksysteem controleert de syntaxis </li></ul></ul><ul><ul><li>het gegevensbanksysteem compileert de opdracht </li></ul></ul><ul><ul><li>het gegevensbanksysteem voert de opdracht uit </li></ul></ul>
    49. 53. java.sql.PreparedStatement <ul><ul><li>gebruikt voor de uitvoering van dynamische SQL opdrachten </li></ul></ul><ul><ul><ul><li>IN parameters </li></ul></ul></ul>Res PreparedStatement p = con.prepareStatement( &quot;SELECT dname, dnumber, mgrssn, mgrstartdate &quot; + &quot; FROM Department&quot; + &quot; WHERE dnumber = ?&quot; ); p.clearParameters(); p.setInt(1, 1); ResultSet rs=p.executeQuery();
    50. 54. java.sql.PreparedStatement <ul><ul><li>hoe worden SQL statements uitgevoerd? </li></ul></ul><ul><ul><ul><li>de gebruiker voert een SQL opdracht in </li></ul></ul></ul><ul><ul><ul><li>het gevensbanksysteem ontleedt de opdracht </li></ul></ul></ul><ul><ul><ul><li>het gegevensbanksysteem controleert de syntaxis </li></ul></ul></ul><ul><ul><ul><li>het gegevensbanksysteem compileert de opdracht </li></ul></ul></ul><ul><ul><ul><li>het gegevensbanksysteem voert de opdracht uit </li></ul></ul></ul><ul><ul><li>enkele de laatste stap moet herhaald worden voor “prepared statements” </li></ul></ul><ul><ul><ul><li>opdracht wordt opnieuw gebruikt met andere waarde voor de parameter </li></ul></ul></ul><ul><ul><li>voorbeeld Connection con = …; String query = “select * from department where id=?”; PreparedStatement pstmt = con.prepareStatement(query); </li></ul></ul>
    51. 55. java.sql.CallableStatement <ul><ul><li>voert “stored procedures” uit </li></ul></ul><ul><ul><ul><li>IN en OUT parameters </li></ul></ul></ul><ul><ul><li>v.b. Connection con = …; CallableStatement cstmt </li></ul></ul><ul><ul><li>con.prepareCall(“Execute getInventory(?,?)”); </li></ul></ul><ul><ul><ul><li>veronderstel eerste parameter OUT van type int veronderstel tweede parameter IN van type String </li></ul></ul></ul>
    52. 56. JDBC versus SQLJ <ul><li>JDBC </li></ul><ul><li>stmt = conn.prepareStatement( </li></ul><ul><li>&quot;INSERT INTO DSN8710.EMP &quot; + </li></ul><ul><li>&quot;(EMPNO, FIRSTNME, MIDINIT, LASTNAME, HIREDATE, SALARY) &quot; </li></ul><ul><li>+ &quot;VALUES (?, ?, ?, ?, CURRENT DATE, ?)&quot;); </li></ul><ul><li>stmt.setString(1, empno); </li></ul><ul><li>stmt.setString(2, firstname); </li></ul><ul><li>stmt.setString(3, midinit); </li></ul><ul><li>stmt.setString(4, lastname); </li></ul><ul><li>stmt.setBigDecimal(5, salary); </li></ul><ul><li>stmt.executeUpdate(); </li></ul><ul><li>stmt.close(); </li></ul><ul><li>SQLJ </li></ul><ul><li># sql [ctx] { </li></ul><ul><li>INSERT INTO DSN8710.EMP </li></ul><ul><li>(EMPNO, FIRSTNME, MIDINIT, LASTNAME, HIREDATE, SALARY) </li></ul><ul><li>VALUES </li></ul><ul><li>(:empno, :firstname, :midinit, :lastname, CURRENT DATE, :salary) </li></ul><ul><li>}; </li></ul>
    53. 57. SQLJ versus JDBC Source: www.cs.manchester.ac.uk/~horrocks/cs2312/Lectures/PPT/jdbc.ppt
    54. 58. VRAGEN?
    1. A particular slide catching your eye?

      Clipping is a handy way to collect important slides you want to go back to later.

    ×