HAAGA-HELIA Heti-09 1 (11) RDBMS - Yhteyskäytännöt Johdanto... 2 Upotettu SQL... 3 ESQL esimerkki... 4 ODBC... 5 Visual Basic ja ADO... 6 JAVA ja JDBC... 7 JDBC esimerkki... 8 Oracle ja JDBC... 9 Connection Pool... 10 Sovelluspalvelimet ja monikerrosarkkitehtuuri... 11 J2EE -arkkitehtuuri... 11
HAAGA-HELIA Heti-09 2 (11) Johdanto Tässä materiaalissa esitellään keskeisiä ohjelmallisen tietokannan käytön rajapintoja, kuten ODBC (erityisesti JDBC) Lisätietoa aiheesta saat Martti Laihon Sovellusarkkitehtuurit-luentomateriaalista osoitteessa http://myy.helia.fi/~ict03d/rdbms/mats/sovellusarkkite htuurit.pdf
HAAGA-HELIA Heti-09 3 (11) Upotettu SQL Embedded SQL (ESQL) ensimmäinen stardardoitu SQL-pohjainen tietokantaliittymä, joka mahdollisti lähes RDBMSjärjestelmästä riippumattoman tietokantaohjelmoinnin isäntäkielenä esim. C++, COBOL, Fortran, PL/I SQL-komennot upotetaan isäntäkielen sovelluskoodiin EXEC SQL lauseilla FETCH kommenolla haetaan monirivisestä tulosjoukosta rivi kerrallaan sovellusohjelmassa käsiteltäväksi tietokantakäsittelyssä tapahtuvia virhetilanteita tutkitaan SQLCode- tai SQLState-muuttujien arvoista upotettua SQL kieltä sisältävä sovelluskoodi käännetään ESQL-esikääntäjällä: EXEC SQL komennot käännetään DBMS-järjestelmän funktiokutsuiksi. ratkaisu on järjestelmäsidonnainen SQLJ (SQL:n upottaminen Java-ohjelmakoodiin)
HAAGA-HELIA Heti-09 4 (11) ESQL esimerkki alla osa ESQL-esimerkkiä, jossa C-isäntäkielen ohjelmakoodiin on upotettu SQL-komentoja ((lähde: Oracle Database Application Developer s Guide Fundamentals)...... #define UNAME_LEN 10... int emp_number; /* Define a host structure for the output values of a SELECT statement. */ /* No declare section needed if precompiler option MODE=ORACLE */ struct { VARCHAR last_name[uname_len]; float salary; float commission_pct; } emprec; /* Define an indicator structure to correspond to the host output structure. */ struct { short emp_name_ind; short sal_ind; short comm_ind; } emprec_ind;... /* Select columns last_name, salary, and commission_pct given the user's input * for employee_id. */ EXEC SQL SELECT last_name, salary, commission_pct INTO :emprec INDICATOR :emprec_ind FROM employees WHERE employee_id = :emp_number;...
HAAGA-HELIA Heti-09 5 (11) ODBC Open Database Connectivity universaali tietokantaohjelmoinnin rajapinta ESQL:n jälkeen SQL-standardiin on määritelty SQL/CLI (SQL Call Level Interface), joka määrittää järjestelmäriippumattoman funktiokirjaston SQLkomentojen suoritukseen Microsoft toteutti ODBC API:n lähinnä C/C++ - tietokantaohjelmointia varten ODBC ajuri (driver) muuttaa OCBC API:n funktiokutsut kyseisen DBMS:n funktiokirjaston kutsuiksi Application ODBC Driver Manager SQL Server driver Oracle driver DB2 driver Network SQL Server Oracle DB2 DBMS-riippuva funktiokirjasto
HAAGA-HELIA Heti-09 6 (11) Visual Basic ja ADO ADO (ActiveX Data Objects) Microsoft on rakentanut ADO luokkakirjaston OLE DB päälle helpottamaan Visual Basic tietokantaohjelmointia tietokantaohjelmoinnin keskeiset luokat o Connection luokka Open() metodi Close() o Command luokka Execute() o Recordset luokka Move() o Fields ja Field luokka getstring() etc o Errors ja Error luokka MS:n.NET arkkitehtuurissa kehittyneempi ADO.NET luokkakirjasto
HAAGA-HELIA Heti-09 7 (11) JAVA ja JDBC Java Database Connectivity Sunin Java-kielen tietokantaliittymä ADO:n kaltaisen, mutta puhtaammin SQL-standardia toteuttava luokkakirjasto ohjelmoinnin keskeiset luokat o DriverManager getconnection() o Connection luokka createstatement() preparestatement() close() o Statement luokka executequery() executeupdate() close(). o PreparedStatement luokka setstring(), setint(), set () executequery() executeupdate() close() o ResultSet luokka next() getstring(), get () close() o SQLException luokka
HAAGA-HELIA Heti-09 8 (11) JDBC esimerkki import java.sql.*; class JdbcTest { public static void main (String args []) throws SQLException { String url = " jdbc:oracle:thin:@<server>:<portti>:<sid>"; try { Class.forName("oracle.jdbc.driver.OracleDriver"); } catch(java.lang.classnotfoundexception e) { System.err.print("ClassNotFoundException: "); System.err.println(e.getMessage()); } try { Connection con = DriverManager.getConnection(url,"username","password"); // Query the employee names Statement stmt = con.createstatement (); ResultSet rset = stmt.executequery ("SELECT ename FROM Scott.emp"); // Print the name out while (rset.next ()) { System.out.println (rset.getstring (1)); } //close the result set, statement, and the connection rset.close(); stmt.close(); con.close(); } catch(sqlexception ex) { System.err.println("-----SQLException-----" + "\nsqlstate: " + ex.getsqlstate() +", Message: " + ex.getmessage() + ", Vendor SQLcode: " + ex.geterrorcode()); }}} JDBC-ajuri Oracle (Thin) oracle.jdbc.driver.oracledriver SQL Server com.microsoft.sqlserver.jdbc.sqlserverdriver DB2 UDB com.ibm.db2.jcc.db2driver MySQL com.mysql.jdbc.driver MariaDB org.mariadb.jdbc.driver DBMS URL Oracle (Thin) SQL Server DB2 UDB MySQL MariaDB jdbc:oracle:thin:@<server>:<portti>:<sid> jdbc:sqlserver://<server>;databasename=<kanta> jdbc:db2://<server>:50000/<kanta> jdbc:mysql://<server>/<kanta> jdbc:mysql://<server>/<kanta> TAI jdbc:mariadb://<server>/<kanta>
HAAGA-HELIA Heti-09 9 (11) Oracle ja JDBC JDBC OCI ajuri JDBC Thin ajuri o tukee kaikkia Oraclen käyttämiä verkkoprotokollia o tukee vain TCP/IP verkkoprotokollaa o edellyttää vain, että tietokantapalvelimella on Oraclen TNS Listener o (oracle.jdbc.driver.oracledriver) o tietokantapalvelimen osoite jdbc:oracle:thin:@<server>:<portti>:<sid> esim jdbc:oracle:thin:@info9.helia.amk:1526:tux1 Lisätietoja Oraclen JDBC ohjelmoinnista Oracle JDBC Developer s Guide and Reference
HAAGA-HELIA Heti-09 10 (11) Connection Pool Tietokantayhteyden avaaminen melko raskas operaatio Tätä varten sovelluspalvelimella on Connection Pool palvelu Connection Pool sisältää valmiita fyysisiä tietokantayhteyksiä, joita jaetaan väliaikaiseen käyttöön tietokantayhteyden avaaminen siis yleensä looginen operaatio, jossa komponentti ottaa käyttöön olemassaolevan fyysisen tietokantayhteyden tietokantayhteyden sulkeminen on siis yleensä looginen operaatio, jossa komponentti vapauttaa käyttämänsä fyysisen tietokantayhteyden ConnectionPool:iin muiden komponenttien käytettäväksi
HAAGA-HELIA Heti-09 11 (11) Sovelluspalvelimet ja monikerrosarkkitehtuuri J2EE -arkkitehtuuri Web-selain Webpalvelin Sovelluspalvelin html/ Applet/ HTTP SSL Servlet, JSP EJB/ Java-sovellus HTTP SSL JDBC JDBC JDBC DB Kts. lisätietoja Laihon materiaalista