Package SQL

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


SPNavRight SPNavRight SPNavRight
BuiltByNOF