Das Package java.sql realisiert die eigentliche JDBC-Funktionalität in Java. Dieses Package ist standardmäßig Teil der Java-Bibliothek (seit JDK in der Version 1.1). Seit der Java-Version 2 (JDK 1.2) beinhaltet das Package 16 Schnittstellen, 6 allgemeine Klassen und 4 Klassen zur Ausnahmebehandlung (Exception Handling). Diese Komponenten werden in Tab. 10-5, Tab. 10-6 und Tab. 10-7 kurz beschrieben, um die Zusammenhänge besser verstehen zu können. Um eine Verbindung zu einer Datenbank zu öffnen, SQL-Anfragen zu stellen und die Ergebnisse geeignet auszuwerten, müssen die Interfaces vorab implementiert werden. Die implementierten Klassen und Exceptions stellen somit die Rahmenfunktionalität des JDBC dar. Um den Aufwand hierfür zu verringern, stellen die JDBC-Treiber Klassen zur Verfügung, die die Interfaces in java.sql implementieren. |
Interface | Bedeutung
Array (JDBC-Version 2) | Dieses Interface definiert die Darstellung des SQL-Datentyps ARRAY in Java.
Blob (JDBC-Version 2) | Dieses Interface definiert die Darstellung des SQL-Datentyps Binary Large Object (BLOB) in Java.
CallableStatement | Dieses Interface definiert die Klasse, die alle SQL-Übergabeprozeduren enthält.
Clob (JDBC-Version 2) | Dieses Interface definiert die Darstellung des SQL-Datentyps Character Large Object (CLOB) in Java.
Connection | Das Interface Connection öffnet eine Verbindung zu einer Datenbank. Anfragen werden durchgeführt und Ergebnisse zurückgeliefert.
DatabaseMetaData | Über dieses Interface werden umfassende Informationen über die Datenbank, zu der eine Verbindung besteht, verfügbar gemacht.
Driver | Durch die Implementierung dieses Interfaces wird die eigentliche Datenbankfunktionalität zur Verfügung gestellt. Hiermit können SQL-Anfragen an die Datenbank realisiert werden. Jeder JDBC-Treibertyp muss dieses Interface implementieren.
PreparedStatement | Dieses Interface stellt ein vorübersetztes SQL-Anweisung-objekt dar, das benutzt wird, um den Ablauf des Datentransfers zu beschleunigen.
Ref (JDBC-Version 2) | Dieses Interface stellt eine Referenz zu einem Wert eines strukturierten SQL-Datentyps in der Datenbank her.
ResultSet | Dieses Interface beschreibt die datenbankspezifischen Rückgabewerte. Ergebnisse einer SQL-Anfrage befinden sich immer in einem ResultSet-Objekt.
ResultSetMetaData | Das Interface ResultSetMetaData enthält Informationen über die zurückgelieferten Anfrageergebnisse, damit eine entsprechende Bearbeitung möglich ist.
SQLData (JDBC-Version 2) | Dieses Interface definiert die Abbildung eines vom Benutzer definierten SQL-Datentyps in Java.
SQLInput (JDBC-Version 2) | Dieses Interface definiert einen Input-Stream, der Werte beinhaltet, die Instanzen von SQL-Datentypen sind.
SQLOutput (JDBC-Version 2) | Dieses Interface definiert einen Output-Stream, um Attribute von benutzerdefinierten Datentypen in die Datenbank zu schreiben.
Statement | Statement wird verwendet, um einfache SQL-Anfragen zu formulieren. Die Klassen CallableStatement und PreparedStatement werden für komplexere Anfragen benutzt. CallableStatement ruft Anfragemakros (sog. Stored Procedures) auf, während PreparedStatement wie Statement verwendet wird. Hierbei wird die Anfrage allerdings vorab vorbereitet und gespeichert. Es sind somit komplexere Anfragen möglich, die (aufgrund der Speicherung) auch zu verschiedenen Zeitpunkten ohne weitere Vorbereitung gestellt werden können.
Struct (JDBC-Version 2) | Dieses Interface stellt die Abbildung von strukturierten Datentypen in Java dar.
Tab. 10.5: Interfaces des Packages java.sql |
Klasse | Bedeutung
Date | Diese Klasse entspricht dem SQL-Typ DATE.
DriverManager | Diese Klasse ist für die Verwaltung von verschiedenen JDBC-Treibern verantwortlich. Hierbei wird ein Treiber geladen und die Verbindung zu einer gegebenen URL mit einer Datenbank etabliert.
DriverPropertyInfo | Diese Klasse enthält JDBC-spezifische Daten über einen bestimmten Treiber. Die Klasse ist Programmierern vorbehalten, die direkt mit Treibern arbeiten wollen.
Time | Diese Klasse erweitert die Klasse Date um den SQL-Datentyp TIME.
Timestamp | Diese Klasse erweitert die Klasse Date dahingehend, dass genaue Zeitmarken definiert werden können. Zeitmarken werden für den Locking-Mechanismus einer relationalen Datenbank benutzt, damit bei gleichzeitigem Zugriff auf denselben Datensatz verhindert wird, dass mehrere Benutzern gleichzeitig schreiben dürfen.
Types | Diese Klasse definiert für SQL-Datentypen deren entsprechende Werte in Java.
Tab. 10.6: Klassen des Packages java.sql |
Exception | Bedeutung
BatchUpdateException (JDBC-Version 2) | Diese Klasse erweitert die Klasse SQLException. Ein Objekt dieser Klasse wird erzeugt, wenn ein Fehler während des Ausführens einer Batch-Operation auftritt.
DataTruncation | Diese Klasse erweitert die Klasse SQLWarning. Ein Objekt dieser Klasse wird erzeugt, wenn Daten, die in eine Datenbank eingefügt werden müssen, nicht vollständig vorliegen.
SQLException | Ein Objekt dieser Klasse wird erzeugt, wenn ein Fehler beim Zugriff auf die Datenbank aufgetreten ist. Die Fehlermeldungen der SQL-Anfragen werden in das Exception-System von Java umgewandelt.
SQLWarning | Diese Klasse erweitert die Klasse SQLException. Eine Ausnahme wird erzeugt, wenn eine Warnung beim Zugriff auf die Datenbank aufgetreten ist.
| Tab. 10.8: Exceptions des Packages java.sql SQL und Java-Datentypen Obwohl SQL als Standard vorliegt, werden nicht alle in SQL definierten Datentypen von beliebigen Datenbanksystemen unterstützt. Teilweise unterscheiden sich Typen von Datenbank zu Datenbank hinsichtlich ihres Namens. Um einen einheitlichen Datenzugriff gewährleisten zu können, stellt JDBC Datentypen zur Verfügung, mit denen auf SQL-Datentypen zugegriffen werden kann, ohne den eigentlichen Namen der Typen zu kennen. Die Methoden setxxx(), getxx() sowie registerOutParameter() bilden Konvertierungsmechanismen, die beim Initialisieren und Lesen von Ergebniswerten verwendet werden, um JDBC-Datentypen auf reguläre Java-Datentypen abzubilden. Besitzt eine Spalte eines Ergebnisses (ResultSet) den JDBC-Datentyp FLOAT, so kann dieser Wert mit der Methode getDouble() als Java-Datentyp Double gelesen werden. Die folgende Konvertierungstabelle stellt die Möglichkeiten dar, die zur Umwandlung von JDBC-Typen in Java-Typen existieren. In Tab. 10-8 sind die in Java vorhandenen Methoden zum Lesen von SQL-Datentypen angegeben. |
SQL-Datentyp | Java-Methode
Beliebiger SQL-Datentyp | getObject()
BIG INT | getLong()
BIT | getBoolean()
CHAR | getString()
DATE | getDate()
DECIMAL | getBignum()
FLOAT | getDouble()
INTEGER | getInt()
REAL | getFloat()
TIME | getTime()
TIME STAMP | getTimestamp()
VARCHAR | getString()

Tab. 10.8: Java-Methoden zum Lesen von SQL-Datentypen In Tab. 10-9 ist die Abbildung von Java-Datentypen auf JDBC-Datentypen angegeben.

Java-Datentyp | JDBC-Datentyp
boolean | BIT
byte | TINYINT
byte | BINARY, VARBINARY oder LONGBINARY
double | DOUBLE
float | REAL
int | INTEGER
long | BIGINT
short | SMALLINT
String | CHAR, VARCHAR oder LONGVARCHAR
java.math.BigDecimal | NUMERIC
java.sql.Date | DATE
java.sql.Time | TIME
java.sql.Timestamp | TIMESTAMP

Tabb. 10.9: Abbildung von Java-Datentypen auf JDBC-Datentypen Tab. 10-10 stellt die Abbildung von JDBC-Datentypen auf Java-Datentypen dar

JDBC-Datentyp | Java-Datentyp
BIGINT | long
BINARY | byte[]
BIT | boolean
CHAR | String
DATE | java.sql.Date
DECIMAL | java.math.BigDecimal
DOUBLE | double
FLOAT | double
INTEGER | int
LONGBINARY | byte[]
LONGVARCHAR | String
NUMERIC | java.math.BigDecimal
REAL | float
SMALLINT | short
TIME | java.sql.Time
TIMESTAMP | java.sql.Timestamp
TINYINT | byte
VARBINARY | byte[]
VARCHAR | String

Tab. 10.10: Abbildung von JDBC-Datentypen auf Java-Datentypen