ppt - Universität Paderborn

Werbung
Datenbankzugriff mit JDBC
Datenbanken und Informationsysteme I
Stefan Böttcher
Adelhard Türling
Universität Paderborn
Inhaltsverzeichnis
1.
2.
3.
4.
5.
6.
7.
Ü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
Adelhard Türling, Universität Paderborn
Datenbanken und Informationssysteme I
JDBC
2 / 24
Ü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/
Adelhard Türling, Universität Paderborn
Datenbanken und Informationssysteme I
JDBC
3 / 24
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
Adelhard Türling, Universität Paderborn
Datenbanken und Informationssysteme I
JDBC:
API
Treibermanager
Treiber
Zieldatenbanksystem
JDBC
4 / 24
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
Adelhard Türling, Universität Paderborn
Datenbanken und Informationssysteme I
JDBC
5 / 24
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 definieren
Statement stmt = con.createStatement() ;
•
Datenbank zugreifen
...
Statement und Verbindung zum DBMS schließen
stmt.close( ) ; con.close( ) ;
(Fehlerbehandlung mit try-catch)
Adelhard Türling, Universität Paderborn
Datenbanken und Informationssysteme I
JDBC
6 / 24
Datenbankzugriffe mit JDBC-ODBC Bridge
•
Treiber laden
•
Verbindung herstellen
Class c = Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
con = DriverManager.getConnection("jdbc:odbc:odbc2access");
•
Statement-Objekte definieren
Statement stmt = con.createStatement() ;
•
Datenbank zugreifen
...
Statement und Verbindung zum DBMS schließen
stmt.close( ) ; con.close( ) ;
(Fehlerbehandlung mit try-catch)
Adelhard Türling, Universität Paderborn
Datenbanken und Informationssysteme I
JDBC
7 / 24
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)" );
...
Adelhard Türling, Universität Paderborn
Datenbanken und Informationssysteme I
JDBC
8 / 24
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( ) ;
Adelhard Türling, Universität Paderborn
Datenbanken und Informationssysteme I
JDBC
9 / 24
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" ; }
Adelhard Türling, Universität Paderborn
Datenbanken und Informationssysteme I
JDBC
10 / 24
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" ; }
Adelhard Türling, Universität Paderborn
Datenbanken und Informationssysteme I
JDBC
11 / 24
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.
Adelhard Türling, Universität Paderborn
Datenbanken und Informationssysteme I
JDBC
12 / 24
ACCESS ODBC Quelle einrichten
1. Mit Access eine neue DB erstellen und speichern:

Z.B.: dbtest.mdb
2. 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"
3. Nun ist unter dem Namen: "odbc2access" die Access DB über
die abstrakte Schnittstelle ODBX erreichbar
Adelhard Türling, Universität Paderborn
Datenbanken und Informationssysteme I
JDBC
13 / 24
Excle als ODBC Quelle
Adelhard Türling, Universität Paderborn
Datenbanken und Informationssysteme I
JDBC
14 / 24
Herunterladen