wis-jdbc

Werbung
Webbasierte Informationssysteme
SS 2004
Java-Datenbankzugriff mit JDBC
Prof. Dr. Böttcher
Java-Datenbankzugriff mit JDBC
Vorlesungsmaterial zu JDBC von Prof. Dr. Stefan Böttcher
Inhaltsverzeichnis:
1. Praktische Hinweise zum Arbeiten mit JDBC, ODBC und dem Datenbanksystem
2. Übungsaufgaben
2.1. Datenbestände aufbauen in JDBC (mit Access)
2.2. Datenbestände abfragen in JDBC (mit Access)
3. Beispielprogramme
3.1. Datenbankinitialisierung : Programmlisting dbinit.java
3.2. Datenselektion : Programmlisting dbselect.java
1. Praktische Hinweise zum Arbeiten mit JDBC, ODBC und dem Datenbanksystem
1.1. Systemvoraussetzungen prüfen (nur 1x – nur zuhause – nicht im PC Pool in E3.130)
Folgende Voraussetzungen benötigen Sie, um die Programme auf Ihrem Rechner zu starten (für Ihren
Rechner zuhause müssen Sie ggf. die Pfade entsprechend abändern) – alle Voraussetzungen sollten auf
Ihrem Rechner im PC-Pool in E3.130 an der Uni bereits gegeben sein:
1. Sie brauchen ein Datenbanksystem, z.B. Access 2000 unter Windows 95/98/NT/2000/Me/XP
2. Das Java Development Kit von Sun, z.B. für Windows XP muss installiert sein, z.B. unter
c:\j2sdk1.4.0_01. Von http://java.sun.com/j2se/1.4.2/download.html können Sie sich Java
kostenlos herunterladen (Java-Version 1.3. genügt aber auch).
3. ODBC muss installiert sein.
1.2. So wurde die Access-Datenbank erzeugt (nur 1x – ist jetzt nicht mehr nötig)
Für die Übungen genügt eine leere Access-Datenbank. Unter Access97 starten Sie Access und wählen Sie
"Erstellen einer neuen Datenbank unter Verwendung von leerer Datenbank"
Wählen Sie "erstellen", speichern Sie Ihre Datenbank (z.B. unter C:\db2.mdb), und verlassen Sie Access.1
Die mitgelieferte Datenbank db2000.mdb wurde unter Access 2000 durch Konvertierung aus db2.mdb
erstellt.
1
Unter Access XP existiert dieses Fenster nicht mehr. Stattdessen gibt es am rechten Rand eine Leiste, in der man
„Neu…/Leere Datenbank“ wählen muss.
Seite 1 von 12
Webbasierte Informationssysteme
SS 2004
Java-Datenbankzugriff mit JDBC
Prof. Dr. Böttcher
1.3. Datenbank unter ODBC anmelden (nur 1x , ist aber an der Uni und zuhause nötig)
Wählen Sie unter Windows 95/98/NT Arbeitsplatz | Systemsteuerung | ODBC und die Karte Benutzer-DSN
bzw unter Windows2000 Arbeitsplatz | Systemsteuerung | Verwaltung | ODBC und die Karte Benutzer-DSN
bzw. unter Windows XP Arbeitsplatz | Systemsteuerung | Verwaltung | Datenquellen(ODBC) und die Karte
Benutzer-DSN.
Falls der Name "odbc2access" noch nicht eingetragen ist, tun Sie folgendes:
clicken Sie auf "Hinzufügen" , und wählen Sie dann aus der Liste als Treiber den Namen
"Microsoft Access-Treiber (*.mdb)".
Clicken Sie auf "Fertigstellen". Wählen Sie als Datenquellenname "odbc2access".
Im Panel Datenbank clicken Sie dann auf "Auswählen" und wählen Sie die erstellte Access-Datenbank aus,
und zwar die mitgelieferte Datenbank db2000.mdb für Access 2000 (bzw. db2.mdb für Acsess 97).
Wählen Sie mehrfach OK, um den ODBC-Datenquellen-Administrator zu verlassen.
1.4. Java-Pfade setzen am PC im Pool in E3.130 (welche Pfade hängt vom Pool-Rechner ab !)
Um Java 1.4. am PC-Pool der Uni zu benutzen, setzen Sie die Umgebungsvariablen path und classpath
in jeder DOS-Box mit einem Aufruf der Batch-Datei j13pool oder j14pool auf
set classpath=.;c:\j2sdk1.4.0_01\lib\dt.jar;c:\c:\j2sdk1.4.0_01\lib\tools.jar;%classpath%
set path=c:\j2sdk1.4.0_01\bin;%path%
oder auf
set classpath=.;c:\jdk1.3.1_03\lib\dt.jar;c:\jdk1.3.1_03\lib\tools.jar;%classpath%
set path=c:\jdk1.3.1_03\bin;%path%
Dieser Schritt ist nicht notwendig, wenn bei dem aktuellen Benutzerkonto die Umgebungsvariablen schon
dauerhaft über Arbeitsplatz | Erweitert | Umgebungsvariablen richtig gesetzt wurden, z. B. in der
vorangegangenen Übung zum Thema „Servlets“.
Anschließend können Sie Java-Programme, z.B. dbinit.java mit javac dbinit.java übersetzen und das
übersetzte Programm danach mit java dbinit starten.
Arbeitsverzeichnis > j14pool
<oder>
Arbeitsverzeichnis > javac dbinit.java
Arbeitsverzeichnis > java dbinit
j13pool
1.5. Überblick über die Beipielprogramme
Das Programm dbinit.java erzeugt Ihnen unsere Beispieldatenbank. Es zeigt Ihnen, wie man Tabellen
anlegt und löscht und wie man Datensätze im Java-Programm zusammenbaut und in die Datenbank einträgt.
Ein anderes Programm dbselect.java zeigt Ihnen, wie man mit JDBC Anfragen an die Datenbank stellt
und die Ergebnisse im Java-Programm weiter verarbeitet.
Seite 2 von 12
Webbasierte Informationssysteme
SS 2004
Java-Datenbankzugriff mit JDBC
Prof. Dr. Böttcher
2. Übungsaufgaben
2.1. Übungsaufgabe 1: Datenbestände aufbauen und abfragen
A1. Übersetzen und starten Sie erst dbinit.java und dann dbselect.java ,
um zu sehen, wie die Datenbank initialisiert wird.
A2. Ergänzen Sie zwei stmt.executeUpdate – Befehle in dbinit.java , nämlich für folgende
Informationen:
"Dell liefert auch noch einen pc400 für 1800 in 2 Tagen" und
"Reich gibt auch noch einen pc500 in Auftrag" .
Übersetzen und starten Sie dbinit.java erneut, und starten Sie dann dbselect.class , um sich die
Änderungen anzusehen.
A3. Programmieren Sie in der Datei dbselect.java die Query:
„Zeige alle Informationen zu Liefert-Daten, die in maximal 4 Tagen lieferbar sind“
(Am einfachsten ist es, wenn Sie im Quellprogramm dbselect.java die SQL-Anfrage ändern.)
A4. Programmieren Sie in der Datei dbselect.java die Query:
„Zeige die Namen der Lieferanten von Lieferungen, die in Maximal 4 Tagen lieferbar sind und
billiger als 2000 Euro sind“
(Am einfachsten ist es, wenn Sie im Quellprogramm dbselect.java die SQL-Anfrage ändern.)
Ändern Sie ggf. die Daten der Datenbank, um Ihr Programm zu prüfen
A5. Programmieren Sie in der Datei dbselect.java die Query:
„Zeige die Namen aller Auftraggeber, die einen pc500 bestellt haben“
(Am einfachsten ist es, wenn Sie im Quellprogramm dbselect.java die SQL-Anfrage ändern.)
Ändern Sie ggf. die Daten der Datenbank, um Ihr Programm zu prüfen
Seite 3 von 12
Webbasierte Informationssysteme
SS 2004
Java-Datenbankzugriff mit JDBC
Prof. Dr. Böttcher
3. Die Beispielprogramme (Auszug)
3.1. Datenbankinitialisierung : Programmlisting dbinit.java
import java.sql.*;
public class dbinit
{
public static void main( String[] args )
{
String ergebnis = "" ;
try {
Class c = Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
// Treiber für ODBC
Connection con =
DriverManager.getConnection("jdbc:odbc:odbc2access");
//
:
:DB-Name unter ODBC
ergebnis = makeDB( con ) ;
System.out.println( ergebnis ) ;
con.close() ;
// darf nicht von einer Exception aus makeDB übersprungen werden!
}
catch (Exception e) { System.out.println( e ) ; }
}
public static String makeDB( Connection con )
{
String ausgabe="" ; // String zum Sammeln der Ausgabe
try
{
Statement stmt = con.createStatement() ;
try
{
stmt.executeUpdate( "drop table Liefert" );
} catch (Exception e) { }
stmt.executeUpdate(
"create table Liefert( Lieferant char(10), Teil char(10), " +
" Preis int, Lieferzeit int ) " );
stmt.executeUpdate(
"Insert into Liefert
stmt.executeUpdate(
"Insert into Liefert
stmt.executeUpdate(
"Insert into Liefert
stmt.executeUpdate(
"Insert into Liefert
stmt.executeUpdate(
"Insert into Liefert
stmt.executeUpdate(
"Insert into Liefert
Seite 4 von 12
values('Vobis ','pc400',1700,3)" );
values('Dell
','pc500',2000,6)" );
values('IBM
','pc500',2500,6)" );
values('Vobis ','pc500',2000,3)" );
values('IBM
','pc600',3500,4)" );
values('Vobis ','pc600',2500,3)" );
Webbasierte Informationssysteme
SS 2004
Java-Datenbankzugriff mit JDBC
Prof. Dr. Böttcher
try
{
stmt.executeUpdate( "drop table Auftrag" );
} catch (Exception e) { }
stmt.executeUpdate(
"create table Auftrag( Kunde char(10), PC char(10) ) " );
stmt.executeUpdate(
"Insert into Auftrag values('Arm ','pc400') " );
stmt.executeUpdate(
"Insert into Auftrag values('Meier','pc500') " );
stmt.executeUpdate(
"Insert into Auftrag values('Reich','pc600') " );
stmt.close();
// Statement schließen
ausgabe += "\nDatenbank initialisiert.\n" ;
} catch (Exception e) { ausgabe += "\n" + "Fehler: " + e ; }
return ausgabe ;
} // makeDB zuende
}
// class
zuende
Seite 5 von 12
Webbasierte Informationssysteme
SS 2004
Java-Datenbankzugriff mit JDBC
Prof. Dr. Böttcher
3.2. Datenselektion : Programmlisting dbselect.java
import java.sql.*;
public class dbselect
{
public static void main( String[] args )
{
String ergebnis = "" ;
try {
Class c = Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
// Treiber für ODBC
Connection con =
DriverManager.getConnection("jdbc:odbc:odbc2access");
//
:
:DB-Name unter ODBC
ergebnis = selectTab( con , "2200" ) ;
System.out.println( ergebnis ) ;
con.close() ;
}
catch (Exception e) { System.out.println( e ) ; }
}
public static String selectTab( Connection con, String limit )
{
String ausgabe="" ; // String zum Sammeln der Ausgabe
try {
Statement stmt = con.createStatement() ;
ResultSet rsLiefert = stmt.executeQuery(
"SELECT * FROM Liefert WHERE Preis < " + limit ) ;
//
//
Strings in SQL müßten zusätzlich in einfache Hochkommas:
"SELECT * FROM Liefert WHERE Teil = '" + limit + "'" ) ;
ausgabe += "\n\nLiefert:\n( Lieferant Teil" +
"
Preis Lieferzeit )" ;
while (rsLiefert.next())
// hole nächstes Tupel aus Result-Set
{
ausgabe += "\n" + rsLiefert.getString("Lieferant") +
"
" + rsLiefert.getString("Teil") +
"
" + rsLiefert.getInt("Preis") +
"
" + rsLiefert.getInt("Lieferzeit") ;
}
rsLiefert.close() ;
stmt.close() ;
// Result-Set schließen
// Statement schließen
}
catch (Exception e)
{
ausgabe += "\nFehler bei Anfrage an die Datenbank:\n" + e ;
}
return ausgabe ;
} // selectTab zuende
}
// class
zuende
Seite 6 von 12
Herunterladen