Java Database Connectivity (JDBC) 14.07.2009 Walther Rathenau Gewerbeschule 1
Was ist JDBC? Hauptsächlich eine Sammlung von Java Klassen und Schnittstellen für eine einfache Verbindung von Java Programmen und Datenbanken eine einheitliche Schnittstelle zu Datenbanken verschiedener Hersteller unter Verwendung von geeigneten Treibern einfache Verarbeitung von SQL Anweisungen Java Pendant zu ODBC (Open Database Connectivity) von C Seit JDK 1.1 Bestandteil von Java http://java.sun.com/products/jdbc/overview.html http://openbook.galileocomputing.de/javainsel8/javainsel_23_003.htm 14.07.2009 Walther Rathenau Gewerbeschule 2
JDBC Architektur Muss extra installiert werden! DB2 Treiber DB2 Datenbank Java Programm JDBC Treiber Manager Oracle Treiber Oracle Datenbank... Im JDK enthalten MySQL Treiber MySQL Datenbank 14.07.2009 Walther Rathenau Gewerbeschule 3
Treiberinstallation Die einzelnen Treiber für die verschiedenen Datenbanken werden meist von den Herstellern kostenlos geliefert. In den meisten Fällen handelt es sich um JAR Dateien, die dann dem CLASSPATH hinzugefügt werden müssen, damit der Java Classloader die entsprechenden Klassen findet. NetBeans bietet über Libraries > ADD JAR/Folder die Möglichkeit, den Treiber dem Java Classloader mitzuteilen! 14.07.2009 Walther Rathenau Gewerbeschule 4
JDBC Beispiel import java.sql.*; public class Test { public static void main( String args[]) { Connection con = DriverManager.getConnection("jdbc:postgresql:database", "user", "passwort"); Statement stmt = con.createstatement(); ResultSet rs = stmt.executequery("select * FROM Country"); while (rs.next()) { System.out.println(rs.getString(1)) con.close(); 14.07.2009 Walther Rathenau Gewerbeschule 5
JDBC Funktionalität Das Package java.sql enthält die Klassen und Schnittstellen des JDBC http://java.sun.com/javase/6/docs/api/java/sql/package-summary.html Aufbau einer Verbindung zur Datenbank über die Klasse DriverManager und die Schnittstelle Connection Versenden von SQL Anweisungen an die Datenbank über die Schnittstelle Statement Verarbeiten der Ergebnismenge über die Schnittstelle ResultSet Siehe: JDBC_Beispiel.java 14.07.2009 Walther Rathenau Gewerbeschule 6
Verbindungsaufbau Aufruf an den DriverManager: Connection name = DriverManager.getConnection ( jdbc-url, user-id, passwd ); Der Treiber Manager stellt über die entsprechenden Klassen des Treibers die Verbindung zur Datenbank her! import java.sql.*; public class Test{ public static void main(string args[]){ Connection con = DriverManager.getConnection("jdbc:postgresql:database", "user", "passwort");... 14.07.2009 Walther Rathenau Gewerbeschule 7
Klasse Statement Die Objekt vom Typ Statement wird verwendet, um SQL Anweisungen an die Datenbank zu schicken. Ein solches Objekt kann nur über ein Connection Objekt erzeugt werden. Statement stmt = connection.createstatement(); ResultSet <result> = stmt.executequery( sql-string ); Statement bietet über verschiedene Methoden die Möglichkeit, die Daten der Datenbank auch zu ändern! //anzahl ist die Anzahl der betroffenen Datensätze int <anzahl> = stmt.executeupdate( sql-string ); 14.07.2009 Walther Rathenau Gewerbeschule 8
Klasse Statement import java.sql.*; Hier wird ein Statement Objekt erzeugt. public class Test { public static void main( String args[]) { Connection con = DriverManager.getConnection("jdbc:postgresql:database", "user", "passwort"); Statement stmt = con.createstatement(); ResultSet rs = stmt.executequery("select * FROM Country");... Hier wird die executequery() Methode des Statement Objekts verwendet, um eine SQL Abfrage an die Datenbank zu schicken! 14.07.2009 Walther Rathenau Gewerbeschule 9
Behandlung von Ergebnismengen Das Ergenis einer SQL Abfrage wird in einem ResultSet- Objekt verwaltet. ResultSet rs = statement.executequery( string ); Die Methode <rs>.next() setzt den Zeiger auf den nächsten zu bearbeitenden Datensatz und liefert zudem den booleschen Wert true. Falls alle Datensätze bearbeitet sind, liefert <rs>.next() den booleschen Wert false! Name Code Population Germany de 83536115 Afghanistan af 15000000 Indien in 1065070607 <rs>.next() liefert true <rs>.next() liefert false 14.07.2009 Walther Rathenau Gewerbeschule 10
Behandlung von Ergebnismengen import java.sql.*; public class Test { public static void main( String args[]) { Connection con = DriverManager.getConnection("jdbc:postgresql:database", "user", "passwort"); Statement stmt = con.createstatement(); ResultSet rs = stmt.executequery("select * FROM Country"); while (rs.next()) { System.out.println(rs.getString(1)) con.close(); liefert den Wert der ersten Ergebnisspalte! 14.07.2009 Walther Rathenau Gewerbeschule 11
Aufgabe 1 Greifen Sie mittels eines Java Programms auf die Mondial Datenbank zu und geben Sie die Namen aller afrikanischen Staaten aus, die Mitglied der Organisation WHO sind! Zeit: 30 Minuten 14.07.2009 Walther Rathenau Gewerbeschule 12
Behandlung von Ergebnismengen Der Zugriff auf die einzelnen Spalten der Ergebnis Datensätze geschieht wie folgt: result-set.get type ( attribute )... ResultSet countries = stmt.executequery ( SELECT Name, Code, Population FROM Country ); Name Code Population Germany de 83536115......... attribute ist die Spaltenbezeichnung und kann entweder durch Spaltennamen oder durch die Spaltennummer gegeben sein. countries.getstring( Code ); countries.getint( Population ); countries.getint(3); liefern denselben Eintrag! 14.07.2009 Walther Rathenau Gewerbeschule 13
Behandlung von Ergebnismengen Der Zugriff auf die einzelnen Spalten der Ergebnis Datensätze geschieht wie folgt: result-set.get type ( attribute ) type ist dabei ein Java Datentyp Datenbank Typen INTEGER REAL,FLOAT BOOLEAN CHAR,VARCHAR DATE TIME get Methode getint(..) getfloat(..) getboolean(..) getstring(..) getdate(..) gettime(..) getstring() funktioniert immer! 14.07.2009 Walther Rathenau Gewerbeschule 14