JDBC inoffizielle Abkürzung für: Java Database Connectivity seit Java 1.1 Bestandteil der API: packages java.sql, javax.sql ist eine Menge von Klassen und Methoden, um aus Java-Programmen relationale Datenbanken benutzen zu können JDBC vereinheitlicht durch eine Programmierschnittstelle den Zugriff auf unterschiedliche Datenbanken für die Benutzung zusätzlich notwendig sind spezielle JDBC-Treiber für die jeweiligen Datenbanken, die die speziellen, unterschiedlichen Zugriffarten für die jeweilige Datenbank beherrschen. JDBC verwendet den SQL 2 -Standard von 1992. Aktuelle Version JDBC 3.0 seit j2sdk1.4.0
JDBC-Treiber ( s.a. java.sun.com/products/jdbc) 4 Arten 1. JDBC-ODBC Bridge Treiber Nativer Treiber, um einfach auf unter Windows über ODBC verfügbare Datenbanken zugreifen zu können 2. Native API Java Treiber Diese Treiber übersetzen die JDBC-Aufrufe mit Hilfe von nativen Methoden in Datenbankaufrufe. 3. Netz-Protokoll All-Java Treiber für eine db-unabhängige Netzwerkschnittstelle in Java geschriebene Treiber. 4. Native Protocoll All-Java Treiber in Java geschriebene Treiber, die direkt mit der Datenbank kommunizieren können, herstellerabhängig
Typische Verarbeitungsfolge 1. JDBC-Datenbanktreiber laden ( forname() ) 2. Verbinden mit der Datenbank ( getconnection() ) 3. SQL-Anweisungen zur Datenbank senden - Vorbereiten ( z.b. createstatement() ) - SQL-Anweisung ausführen ( z.b. executequery() oder executeupdate() ) 4. Ergebnisse auswerten ( z.b. next(), getxxx() ) 5. Verbindung schliessen ( close() )
JDBC-Treiber laden mit der Methode forname() aus der Klasse java.lang.class: public static Class forname( String classname ) throws ClassNotFoundException Beispiele: JDBC-ODBC-Brückentreiber für Windows: Class.forName( sun.jdbc.odbc.jdbcodbcdriver ); McKoi-JDBC-Treiber: Class.forName( com.mckoi.jdbcdriver ); Oracle-JDBC-Treiber: Class.forName( oracle.jdbc.driver.oracledriver ); MySQL-JDBC-Treiber: Class.forName( org.gjt.mm.mysql.driver );
Verbinden mit der Datenbank Klasse java.sql.drivermanager: 3 überladene Methoden getconnection() z.b.: public static Connection getconnection( String url, String user, String password ) throws SQLException String url enthält die Angabe einer Datenquelle in der Form jdbc:subprotocol:datasource (s. Doku zum Treiber)
Verbinden mit der Datenbank Beispiele: ODBC-Datenbankverbindung: Connection con = DriverManager.getConnection( jdbc:odbc:kundendb, uuu, ppp ); lokale McKoi-Datenbankverbindung: String url = jdbc:mckoi:local://e:/mymckoi/exampledb.conf ; String user = user, pass = pass1212 ; Connection con = DriverManager.getConnection( url,user,pass ); remote Oracle Datenbankverbindung: String url = jdbc:oracle:thin:@ux-01:1521:db02 ; // Version 8 String user = scott, pass = tiger ; Connection con = DriverManager.getConnection( url,user,pass ); lokale MySQL-Datenbankverbindung: String url = jdbc:mysql://localhost/testdb ; String user =, pass = ; Connection con = DriverManager.getConnection( url,user,pass );
Vorbereitung, um ein SQL-Kommando zur DB zu senden Dazu muss zuerst ein Statement-Objekt erstellt werden für Datenbankabfragen, die nur selten verwendet werden: Interface java.sql.connection 3 überladene Methoden createstatement(): z.b.: public Statement createstatement() throws SQLException Beispiel: Statement stmt = con.createstatement();
SQL-Kommandos ausführen um Datenbankabfragen ( SELECT ) zu erledigen Interface java.sql.statement Methode executequery(): z.b.: public ResultSet executequery( String sql ) throws SQLException führt die als Parameter übergebene SQL-Anweisung aus und gibt ein ResultSet-Objekt mit den Ergebnissen zurück Beispiel: ResultSet result = stmt.executequery( SELECT * FROM Person );
Auswertung des ResultSet-Objekts Das ResultSet-Objekt enthält für jede Zeile einen Eintrag. Mit der Methode next() kann jeweils ein Eintrag nach dem anderen verarbeitet werden: public boolean next() throws SQLException Bsp: while( result.next() ) { System.out.println( result.getstring(1) + \n + result.getint( age ) ); } für jeden Datentyp in SQL gibt es einen meist übereinstimmenden Datentyp in JAVA. Mit getter-methoden können die Ergebnisse des ResultSets in Java- Variablen übernommen werden.
Auswertung des ResultSet-Objekts für jeden Datentyp in SQL gibt es einen meist übereinstimmenden Datentyp in JAVA. Mit getxxx-methoden können die Ergebnisse des ResultSets in Java- Variablen übernommen werden. z.b.: getdouble( ) für SQL-Typ DOUBLE getstring( ) für SQL-Type VARCHAR, CHAR alle Spalten können mit getstring() übernommen werden, unabhängig vom SQL-Datentyp
Auswertung des ResultSet-Objekts Sie existieren in 2 Ausführungen mit jeweils einem Parameter vom Typ int oder String double getdouble( int i ) liefert den Wert der i. Spalte als double-wert Beachte: Spaltennr. beginnen ab 1! Bsp: double x = result.getdouble( 3 ); liefert den Wert der 3. Spalte als double-wert double getdouble( String s ) liefert den Wert der Spalte s als double-wert Bsp: double x = result.getdouble( Entfernung ); liefert den Wert Spalte Entfernung als double-wert
SQL-Kommandos ausführen um Datenbankänderungen (INSERT, DELETE, UPDATE) zu erledigen, aber auch z.b. für CREATE Interface java.sql.statement Methode executeupdate(): z.b.: public int executeupdate( String sql ) throws SQLException führt die als Parameter übergebene SQL-Anweisung aus und gibt einen int-wert zurück mit der Anzahl Einträge, die bearbeitet wurden oder 0 für SQL-Anweisungen, die nichts zurückgeben, wie z.b. CREATE. Beispiel: int anz = stmt.executeupdate( DELETE FROM Person + WHERE name = 'Eva Mustermann' );