Java Database Connectivity

Werbung
Eine Einführung in die Anwendung von
JDBC
- Java Database Connectivity Tim München
Michael Lambers
18. November 2005
Überblick
●
JDBC-Grundlagen
●
Nutzung von JDBC-Treibern
●
Programmbeispiel
JDBC - Grundlagen
●
Java Database Connectivity
●
SQL-konforme API von Sun Microsystems
●
●
●
●
Interfaces in den Packages
java.sql und javax.sql
Treiber implementieren diese Interfaces
Entwicklung von Anwendungen ohne
Berücksichtung der Spezifikationen der
einzelnen Datenbanksysteme
Vier Treibertypen
JDBC – Treibertypen
Typ 1 - Treiber
Typ 2 - Treiber
Typ 3 - Treiber
Typ 4 - Treiber
Client-Rechner
Java-VM
Java-Applikation
JDBC-Schnittstelle
Java-ODBC bridge (SUN)
DB-unabhängig
JDBCNetzwerktreiber
DB-unabhängig
Java-API
DB-abhängig
ODBCSchnittstelle
Client-Bibliothek
DB-abhängig
ODBC-ClientBibliothek
DB-abhängig
Netzwerk
MiddlewareServer
Datenbankserver
DBMS
Java-Treiber
DB-abhängig
Überblick
●
JDBC-Grundlagen
●
Nutzung von JDBC-Treibern
●
Programmbeispiel
JDBC - Verbindungsaufbau
●
1. Schritt: Laden des Treibers
Class.forName("Treiberklasse").newInstance();
●
2. Schritt: Herstellen der Verbindung
java.sql.Connection conn =
DriverManager.getConnection("url",
"user", "password");
DB-Metadaten (1)
●
●
Allgemeine Informationen
Eigenschaften und Fähigkeiten der
verwendeten Datenbank
●
Vorhandene Tabellen
●
Zugriffsrechte
DB-Metadaten (2)
●
1. Schritt: Metadaten abrufen
java.sql.DatabaseMetaData dmd =
conn.getMetaData();
●
2. Schritt: Abfrage z. B. der Datenbankversion
String dbname =
dmd.getDatabaseProductName();
String dbversion =
dmd.getDatabaseProductVersion();
SQL-SELECT (1)
●
1. Schritt: Statement erzeugen
java.sql.Statement s = conn.createStatement();
●
2. Schritt: Durchführen der Abfrage
java.sql.RecordSet rs =
s.executeQuery("SELECT ...");
SQL-SELECT (2)
●
3. Schritt: Daten ausgeben
while (rs.next()) {
int alter = rs.getInteger(1);
String name = rs.getString(2);
System.out.println(...);
}
while (rs.next()) {
int alter = rs.getInteger("alter");
String name = rs.getString("name");
System.out.println(...);
}
RecordSet-Metadaten (1)
●
Allgemeine Informationen
●
Eigenschaften der Attribute
–
Bezeichnung
–
Datentyp
–
Größe
–
nullable?
RecordSet-Metadaten (2)
●
1. Schritt: Metadaten abfragen
java.sql.ResultSetMetaData rsmd =
rs.getMetaData();
●
2. Schritt: z. B. Anzahl der Attribute abfragen
int count = rsmd.getColumnCount();
Prepared Statements (1)
●
Problem: Viele nahezu identische SQL-Befehle
INSERT INTO tabelle VALUES (a1, b1, c1);
INSERT INTO tabelle VALUES (a2, b2, c2);
INSERT INTO tabelle VALUES (a3, b3, c3);
...
●
Lösung: Einsatz von Prepared Statements
INSERT INTO tabelle VALUES (?, ?, ?);
Prepared Statements (2)
●
Schritt 1: Erzeugen des Prepared Statements
java.sql.PreparedStatement ps =
conn.preparedStatement(
"INSERT INTO tabelle VALUES (?, ?)");
●
Schritt 2: Füllen mit Daten
ps.setInt(1, 4711);
ps.setString(2, "Testtext");
●
Schritt 3: Abschicken der Daten
ps.execute();
Fehlerbehandlung (1)
●
●
Fehlgeschlagene JDBC-Calls werfen
SQLExceptions
Beispiel:
try {
...
}
catch (SQLException e) {
System.out.println(e.toString());
e.printStackTrace();
...
}
Fehlerbehandlung (2)
●
Bei „harmlosen“ Problemen treten SQLWarnungen auf
–
–
●
eingefügter Text zu lang
Konvertierungsprobleme
Separates Abfragen der SQL-Warnungen nötig
statement.executeUpdate(...);
java.sql.SQLWarning sw =
statement.getWarnings();
while (sw!=null) {
System.out.println(sw.toString());
sw = sw.getNextWarning();
}
Überblick
●
JDBC-Grundlagen
●
Nutzung von JDBC-Treibern
●
Programmbeispiel
Weitere Informationen
●
●
http://java.sun.com/docs/books/tutorial/jdbc
/basics/index.html
http://dev.mysql.com/doc/refman/4.1/en
/java-connector.html
Vielen Dank
für eure
Aufmerksamkeit
Herunterladen