Class.forName("sun.jdbc.odbc.JdbcOdbcDriver")

Werbung
JDBC
JDBC : "Java Database Connectivity"
JDBC stellt eine standarisierte Methode zum Zugriff auf
Datenbanken aus Java-Programmen zur Verfügung.
Einige Datenbanken unterstützen den JDBC-Standard direkt.
Viele andere unterstützen ODBC "Open Database Connectivity".
Diese können übereinen zu Java gehörigen JDBC-ODBC-Umsetzer
angesprochen werden.
Damit können fast alle existierenden Datenbanken direkt oder
indirekt angesprochen werden.
JDBC enthält Möglichkeiten:
Verbindungen zu Datenbanken zu öffnen und zu schließen,
SQL-Anweisungen an Datenbanken zu schicken und
die Antworten entgegenzunehmen und deren Auswertung im
Java-Programm zu ermöglichen.
JDBC baut vollständig auf SQL auf. SQL "Standard Query
Language". Die Kommunikation zwischen dem Java-Programm und
der Datenbank erfolgt über SQL-Anweisungen. Diese werden als
Text an die Datenbank geschickt, die daraufhin als Antwort die
Ergebnisse zurückschickt. Die SQL-Anweisungen werden nicht
vom Java-Compiler auf Korrektheit geprüft. Fehler können also erst
durch die Datenbank festgestellt werden.
Eine weitere Möglichkeit aus Java Datenbanken abzufragen und zu
bearbeiten ist SQLJ von IBM, Oracle, Sybase, Informix u.a.
SQLJ baut ebenfalls auf SQL auf. Die Anweisungen werden jedoch
schon in Java geprüft. Fehler können also schon von Java erkannt
werden.
1. Erstellen einer Datenbank
Zunächst muss die Datenbank aufgebaut werden. Dazu müssen
geeignete Programme genutzt werde, z.B. Access, dBase, Oracle,
Sybase, Informix, DB2, Excel u.s.w.
Unser Beispiel ist eine Access-Datenbank mit folgenden Tabellen:
Studenten
• MatrikelNr, Long Integer, Primärschlüssel
• Name, Text
• Vorname, Text
Veranstaltungen
• VeranstaltungsNr, Long Integer, Primärschlüssel
• Titel, Text
• Kurzbezeichnung, Text
• Semester, Text
• Art, Text
• Stunden, Integer
Belegungen
• Id, Long Integer, Primärschlüssel
• MatrikelNr, Referenz auf Tabelle Studenten
• VeranstaltungsNr, Referenz auf Tabelle Veranstaltungen
Belegungen
id
MatrikelNr
VeranstaltungsNr
Veranstaltungen
VeranstaltungsNr
Titel
Studenten
Kurzbezeichnung
MatrikelNr
Semester
Name
Art
Vorname
Stunden
2. DB in ODBC registrieren
In der Systemsteuerung ODBC bzw. ODBC32 bzw. ODBCdatenquellen öffnen.
Es können ODBC-Quellen registriert werden. Dabei können die
Datenbanken so registriert werden, dass nur der Nutzer selber auf
sie zugreifen kann (Benutzer-DSN) oder so dass alle Nutzer auch
über das Netz darauf zugreifen können (system-DSN).
Dabei können u.A. auch Namen und Passworte für den Zugriff
festgelegt werden.
Wichtig: Datenquellenname ist der Name unter dem von Java auf die
Datenbank zugegriffen wird.
Vorteile:
Es existiert ein einheitlicher Zugriff zu allen Datenbanken.
Das Java-Programm muss keine Informationen über die konkrete
Datenbankdatei haben.
Ohne Änderung des des Java-Programms kann die Datenbank
(Art, Ort) geändert werden.
3. Treiber in Java laden
Um vom Java-Programm auf eine Datenbank zugreifen zu können,
muss ein passender Treiber geladen werden.
Welcher Treiber passend ist hängt von der Datenbank und dem
Betriebssystem ab.
In Windows gibt es ODBC-Treiber für alle Datenbanken. Also kann in
der Regel der JDBC-ODBC-Treiber von SUN verwendet werden:
sun.jdbc.odbc.JdbcOdbcDriver
Der Treiber braucht nur ein mal geladen zu werden und steht dann
immer zur Verfügung. Laden erfolgt in einem statischen Block
einer Klasse.
Laden des Treibers erfolgt z.B. mit
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Ausnahme ClassNotFoundException muss abgefangen werden.
public class StudentenDB
{
static
{
String driv = "sun.jdbc.odbc.JdbcOdbcDriver";
try
{
Class.forName(driv);
}
catch (ClassNotFoundException cnfe)
{
System.err.println(driv+" nicht gefunden!");
System.exit(1);
}
}
}
4. Öffnen der Datenbank
Zum Herstellen der Verbindung zwischen der Datenbank und dem
Java-Programm stellt die Klasse DriverManager die Methode
getConnection zur Verfügung.
public static Connection getConnection(String url)
Mit Hilfe von url wird dir zu öffnende Verbindung beschrieben. Die
genaue Form hängt vom Treiber und von der Datenbank ab.
url = protocol:subprotocol:database
protocol = jdbc
subprotocol = odbc
database = StudentenDatenbank
Andere Formen von getConnection erlauben die Angabe von
Namen und Passwort.
Die Herstellung der Verbindung muss vor jedem erneuen Zugriff
geschehen. Z.B. in eine Konstruktor.
Die Datenbank wird geschlossen, indem die close-Methode der
Verbindung aufgerufen wird.
private Connection dbConn = null;
private String connString = "jdbc:odbc:StudentenDatenbank";
public StudentenDB() {
try {
dbConn = DriverManager.getConnection(connString);
}
catch (SQLException sqle) {
System.err.println("Fehler beim Öffnen der Verbindung "+connString);
System.exit(2);
}
}
public void close() {
try {
dbConn.close();
}
catch (SQLException sqle) {
System.err.println("Fehler beim Schließen der Verbindung "+connString);
System.exit(3);
}}
5. Datenbank abfragen
Abfragen erfolgen grundsätzlich mit Hilfe von SQL-Anweisungen.
SQL-Anweisungen werden durch die execute-Methode eines
Statement-Objektes ausgeführt.
Durch die erfolgreiche Ausführung einer SQL-Anweisung wird ein
ResultSet-Objekt erzeugt, das die Ergebnisse der Abfrage in Form
einer Tabelle enthält.
Durch die next-Methode des ResultSet-Objektes kann durch die
Zeilen der Ergebnistabelle gewandert werden.
Mit Hilfe der getXXX-Methoden des ResultSet-Objektes können die
Elemente der Zeilen abgefragt werden.
Mit Hilfe der Klasse ResultSetMetaData können Informationen über
die Spalten der Tabelle (Name, Datentyp, Schreibbarkeit u.s.w.)
abgefragt werden.
public void printContent(String table) {
try
{
System.out.println(">>>>>>>>>>>>> "+table +" >>>>>>>>>>>>>");
Statement pC = dbConn.createStatement();
pC.execute("SELECT * FROM "+table);
ResultSet res = pC.getResultSet();
ResultSetMetaData resMD = res.getMetaData();
int col = resMD.getColumnCount();
for (int i=1;i<=col;i++ )
System.out.print(resMD.getColumnLabel(i)+"\t");
System.out.println();
while (res.next()) {
for (int i=1;i<=col;i++ )
System.out.print(res.getString(i)+"\t");
System.out.println();
}
res.close();
}
catch (SQLException sqle) {
System.err.println("Fehler beim Lesen der Verbindung "+connString);
System.exit(4);
}
}
Herunterladen