Java und Datenbanksysteme Datenbankanbindung mit JDBC 30.05.2001 Stefan Niederhauser sn@atelier-w.ch 1-Einführung Datenbanksysteme Java und Datenbanken: JDBC Geschichte der JDBC-Versionen Vergleich von Suns JDBC zu Microsofts ODBC
Datenbanksysteme Anwendungsbereich von Datenbanksystemen Verwaltung grosser Datenbestände Optimierter Zugriff Transaktionsmanagement (Rollback) SQL als standardisierte Abfragesprache Alternativen für den Heimgebrauch Flat Files (XML, Tab separiert, etc.) In-Memory Datenbanken java.util.properties Freie Datenbanksysteme (MySQL, HyperSonic SQL, etc.) Java und Datenbanken: JDBC JDBC als integraler Bestandteil der Sun Strategie auf dem Enterprise Markt Plattformübergreifende Entwicklung und Flexibilität beim Datenbankzugriff Simples API als Grundlage
Geschichte der JDBC Versionen JDBC 1.0 (Januar 1997) jdbc.sql.* als optionales Paket JDBC 2.0 (Mai 1998) java.sql.* in JSE2 Neue Datentypen, Performance Hints, etc. javax.sql.* zusätzlich in JEE2 Connection Pooling, JNDI Integration, JTS Integration, etc. JDBC 3.0 in der Public Review seit April 2001 Feedback an jdbc@eng.sun.com Safepoint (Transaction Support), Besserer Java Objekt Integration, etc. JDBC vs. ODBC Basis beider API's X/Open SQL CLI (Call Level Interface) Für ODBC-Developper entwickelt Einfacher Übergang durch ähnlichen Aufbau Mit ODBC-Treibern einsetzbar Durch Typ 1 Driver von Sun oder Drittherstellern Plattformunabhängigkeit vs. Geschwindikeit
2-Implementation Datenflussdiagramm JDBC Driver Typen JDBC Objekte JDBC Datentypen JDBC URL s Datenflussdiagramm Java Applikati o n Java Applet JD JD C B PI A C B vermanager D r i Driver Dr iver MiddleWare Driver OD C B DB MS DB MS
JDBC Driver Typen Typ 1 ODBC Typ 2 Native C Implementation Typ 3 Java.Net Implementation via MiddleWare Typ 4 100% Java-Implementation Typ1Driver ODBC-Driver Typ 2 Driver C Implementation Typ 3 Driver MiddleWare Typ 4 Driver JDBC Objekte java.sql.drivermanager java.sql.connection java.sql.statement java.sql.preparedstatement java.sql.callablestatement java.sql.resultset MetaData java.sql.databasemetadata java.sql.resultsetmetadata java.sql.sqlexception
JDBC Datentypen Typen-Konvertierung durch Methoden: getxxx() getstring() getint() getblob() etc. Spezielle Datentypen für SQL-Äquivalente: java.sql.blob java.sql.struct java.sql.timestamp etc. JDBC URL s Beispiel jdbc:mysql://db.unibas.ch:3123/somedb?user=u&password =pw Im Detail Protokoll des JDBC Drivers Hostname:Port des Datenbanksystems Datenbank Optionen (User, Passwort, Verschlüsselung, etc.)
3-Schritt für Schritt Hello JDBC World JDBC-Driver laden Datenbankverbindung herstellen SQL-Abfrage Resultate darstellen Updates, Inserts, Deletes Prepared Statements JDBC Driver laden String jdbcdriver = "org.gjt.mm.mysql.driver"; try { Class.forName(jdbcDriver).newInstance(); catch (Exception e) { System.err.println("Unable to load driver."); e.printstacktrace();
Datenbank-Verbindung herstellen String jdbcurl = "jdbc:mysql://db.unibas.ch:8080/jdbc?user=jdbc&password=joe"; Connection con; try { con = DriverManager.getConnection(jdbcURL); catch (SQLException E) { System.err.println("Unable to Connect to Database: "+E.getMessage()); SQL Abfrage String sqlstring = SELECT HELLO, JDBC, -, WORLD "; Statement stm = con.createstatement(); ResultSet res = stm.executequery(sqlstring);
Resultate Abfragen while (res.next()) { System.out.println(res.getString(1) + res.getstring(2) + res.getstring(3) + res.getstring(4)); res.close(); stm.close(); HELLO JDBC - WORLD Updates, Inserts, Deletes String sqlstring = INSERT INTO people VALUES ( 'Hermann', 'Heinz' ) "; Statement stm = con.createstatement(); int n = stm.executeupdate(sqlstring); System.out.println( n + " rows affected")
Prepared Statements String sqlstring = UPDATE persons SET vorname = '?' WHERE id =? "; PreparedStatement ps = con.preparestatement(); for (ix = 0; ix <= 1000; ix++) { ps.setstring(1, "Heinz_"+ix); ps.setint(2, ix); int n = ps.executeupdate(); 4-JDBC Bücher und Links Bücher JDBC API Tutorial and Reference (Sun) Database Programming with JDBC and Java (George Reese / O Reilly Verlag) Links http://www.java.sun.com/products/jdbc/ http://developer.java.sun.com/developer/onlinetraining/database /JDBC20Intro/JDBC20.htm http://mmmysql.sourceforge.net (MySQL JDBC Driver) Literaturverzeichnis JDBC API Entwürfe von Sun: v1.0, v2.0, v2.1, v3.0 (Final Draft) JDBC Dokumentation von Sun google