140 likes | 219 Views
Datenbanken und Informationsysteme I. Datenbankzugriff mit JDBC. Stefan Böttcher Adelhard Türling. Universität Paderborn. Inhaltsverzeichnis. Überblick über JDBC Wichtige Interfaces Datenbankinitialisierung : dbinit.java Datenselektion : dbselect.java Metadaten der Datenbank: dbinf.java
E N D
Datenbanken und Informationsysteme I Datenbankzugriff mit JDBC Stefan Böttcher Adelhard Türling Universität Paderborn
Inhaltsverzeichnis • Überblick über JDBC • Wichtige Interfaces • Datenbankinitialisierung : dbinit.java • Datenselektion : dbselect.java • Metadaten der Datenbank: dbinf.java • Metadaten einer Tabelle: dbtab.java • Praktische Hinweise zum Arbeiten mit JDBC, ODBC
Überblick über JDBC Java Data Base Connectivity Schnittstelle • Package: • java.sql (core) • javax.sql (benutzt in J2EETM) http://java.sun.com/j2se/1.4.1/docs/api/ • Tutorial: htp://java.sun.com/j2se/1.4.1/docs/api/
Was ist und was bietet JDBC • Paket von Java-Klassen zum DB-Zugriff mit SQL • vom Ziel-DBMS unabhängige API • Standard seit Java 1.1 mittlerweite JDBCV3.0 Java-Programm JDBC:APITreibermanager Treiber Ziel-datenbanksystem
Interfaces von JDBC • SQLDriver: Treiber für ein Ziel-DBMS oder ODBC • SQLDriverManager : registriert Treiber • Connection : Für Verbindungen • Statement : für Statement-Objekt, z.B. Query • ResultSet : für Ergebnismenge • DataBaseMetaData : für Schemainformationen Die Klassen zu diesen Interfaces werden von DB-Herstellern implementiert JDBC-ODBC-Brücke wird von SUN mitgeliefert
Datenbankzugriffe mit JDBC • Treiber laden Class c = Class.forName(“com.sybase.jdbc.SybDriver“) ; • Verbindung herstellen con = DriverManager.getConnection( "jdbc:sybase:Tds:beethoven.uni-paderborn.de:4100/datenbanken01" , "userid", "password" ); Statement-Objekte definierenStatement stmt = con.createStatement() ; • Datenbank zugreifen ... Statement und Verbindung zum DBMS schließen stmt.close( ) ; con.close( ) ; (Fehlerbehandlung mit try-catch)
Datenbankzugriffe mit JDBC-ODBC Bridge • Treiber ladenClass c = Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); • Verbindung herstellen con = DriverManager.getConnection("jdbc:odbc:odbc2access"); • Statement-Objekte definierenStatement stmt = con.createStatement() ; • Datenbank zugreifen ... Statement und Verbindung zum DBMS schließen stmt.close( ) ; con.close( ) ; (Fehlerbehandlung mit try-catch)
Datenbank initialisieren mit JDBC Class c = Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); con = DriverManager.getConnection("jdbc:odbc:odbc2access");Statement stmt = con.createStatement() ; • Datenbank initialisieren (Data Defenition Language DDM) stmt.executeUpdate( "drop table Liefert" ); stmt.executeUpdate( "create table Liefert( Lieferant char(10), Teil char(10), " + " Preis int, Lieferzeit int ) " ); • Einfügen (Data Manipulation Language DML) stmt.executeUpdate( "Insert into Liefert values('Vobis ','pc400',1700,3)" ); ...
Datenbank-Anfragen mit JDBC Class c = Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); con = DriverManager.getConnection("jdbc:odbc:odbc2access");Statement stmt = con.createStatement() ; • Datenbankanfrage stellen ResultSet rsLiefert = stmt.executeQuery( “ select * from Liefert where Teil = ‘pc500‘ “);while ( rsLiefert.next( ) ) // hole nächstes Tupel aus Result-Set { ausgabe += rsLiefert.getString( "Lieferant" ) ; // ggf. weitere Spalten ausgeben } stmt.close( ) ; con.close( ) ;
Metadaten der Connection Class c = Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); con = DriverManager.getConnection("jdbc:odbc:odbc2access");Statement stmt = con.createStatement() ; • Metadaten holen DatabaseMetaData md = con.getMetaData(); • Hilfsvariable final String[] tabellen = {"TABLE"}; • Hole Tabellennamen ResultSet tablesNames =md.getTables(null,null,null,tabellen); while (tablesNames.next()) { // Hole Tabellenname String tablename = new String(tablesNames.getString(3)); ausgabe += tablename + "\n" ; }
Metadaten einer Tabelle ResultSet rs = stmt.executeQuery("select * from " + "Auftrag"); • Hole Meta-Daten für dieses Result Set ResultSetMetaData rsmd= rs.getMetaData(); int spaltenAnzahl = rsmd.getColumnCount(); • Attribut Namen der Tabelle for( spalte=1 ; spalte <= spaltenAnzahl ; spalte++ ) { ausgabe += rsmd.getColumnLabel( spalte ) + "\t\t" ; } ausgabe += "\n-------------------------------------\n" ; • Tupel ausgeben while (rs.next()) {for( spalte=1 ; spalte <= spaltenAnzahl ; spalte++ ) { ausgabe += rs.getString(spalte) + "\t" ; } ausgabe += "\n" ; }
Praktische Hinweise zum Arbeiten mit JDBC, ODBC Systemvoraussetzungen • Datenbanksystem: Access, Oracle oder anderes rel. DBMS • JDK (aktuell: J2DK1.4) • Umgebungsvariable path: z.B. set Path=C:\j2sdk1.4.0\bin;%path% • Umgebungsvariable classpath: z.B. set classpath=.;c:\j2sdk1.4.0\lib • ODBC muß installiert sein.
ACCESS ODBC Quelle einrichten • Mit Access eine neue DB erstellen und speichern: • Z.B.: dbtest.mdb • ODBC Quelle für Access einrichten: • Arbeitsplatz | Systemsteuerung | Verwaltung | ODBC • Karte Benutzer-DSN • Name z.B. "odbc2access" • Treiber: "Microsoft Access-Treiber (*.mdb)". • Bestätigen mit "OK" • Nun ist unter dem Namen: "odbc2access" die Access DB über die abstrakte Schnittstelle ODBX erreichbar