Java und Datenbanksysteme Datenbankanbindung mit JDBC 30.05.2001 – Stefan Niederhauser – [email protected] 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 F Alternativen für den Heimgebrauch FFlat Files (XML, Tab separiert, etc.) FIn-Memory Datenbanken Fjava.util.Properties FFreie 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 [email protected] 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 J ava Applikati o n Java Applet JD CB – JD CB – Driver PI A verManager D r i Dr iver MiddleWare DB MS Driver OD C B 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 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 Typ 1 Driver ODBC-Driver Typ 2 Driver C Implementation Typ 3 Driver MiddleWare Typ 4 Driver 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...