Einleitung

Java Database Connectivity (JDBC) ist eine Handelsmarke der Firma Sun Microsystems. Viele Anwender verstehen unter der Abkürzung JDBC allerdings auch allgemein das Konzept der Java Database Connectivity, ohne konkreten Bezug auf einen Markennamen. JDBC stellt ein Application Programming Interface (API) zur Verfügung, mit dessen Unterstützung SQL-Datenbankanfragen gestellt und ausgewertet werden können. JDBC fordert hierbei keine Voraussetzungen an die benutzte Datenbank. Somit können unabhängig von der verwendeten Datenbank Java-Anwendungen erstellt werden, die auf verschiedene Datenbanktypen zugreifen, ohne dass Änderungen im Code vorgenommen werden müssen. Das JDBC-API ist vollständig in Java implementiert. Aus diesem Grund sind alle weiteren Vorteile von Java, wie bspw. die Unabhängigkeit von der verwendeten Plattform oder die Verwendung im World Wide Web, ebenfalls verfügbar. Ein besonderes Anliegen der Firma Sun Microsystems war es, das API so einfach wie möglich zu halten. Hierdurch können sich Entwickler verstärkt auf die Datenbankfunktionalität konzentrieren, ohne von komplizierten Anfrageoperationen abgelenkt zu werden. Abb. 10-1 veranschaulicht den transparenten Datenzugriff einer in Java geschriebenen Anwendung auf verschiedene Datenbanktypen durch die JDBC-Schnittstelle.

kap101 

Abb. 10.1: Transparenter Datenzugriff in JDBC

Im Folgenden werden wichtige Begriffe der Datenbankwelt, die im weiteren Verlauf dieses Kapitels verwendet werden, erläutert.

Relationale Datenbanken

Eine relationale Datenbank ist eine Datenbank, bei der Daten in Form von Tabellen gespeichert werden. Diese Tabellen werden durch Operationen miteinander in Relation gebracht (daher der Name relationale Datenbank). Neben den Daten werden auch alle Verwaltungsinformationen, wie bspw. Verknüpfungen zwischen Tabellen, in Form von Tabellen gespeichert, die wiederum mit Operatoren verknüpft werden können. Folgende Voraussetzungen müssen alle Tabellen erfüllen, damit von einer relationalen Datenbanken gesprochen werden kann:

  • Die Spalten einer Tabelle müssen voneinander verschieden sein. Es dürfen also keine zwei Spalten mit demselben Namen in der gleichen Tabelle vorkommen.
  • Jeder Spalte ist ein Datentyp zugeordnet. Diverse Datentypen werden unterschieden. So ist neben den gängigen Zahlen- und Textdatentypen unter anderem auch der Datentyp Binary verwendbar, mit dem bspw. Bilder in einer relationalen Datenbank abgelegt werden können.
  • Jede Zeile einer Tabelle muss eindeutig identifiziert werden können (es darf also keine doppelten Zeilen geben). Dazu wird aus einer oder mehreren Spalten ein eindeutiger Identifikator gebildet. Dieser Identifikator wird auch als Primärschlüssel bezeichnet.

Ein Beispiel für eine derartige Tabelle ist aus Tab. 10-1 ersichtlich. Diese Tabelle enthält vier verschiedene Spalten: Spieler_Nr., Nachname, Vorname und Gespielt. Als Primärschlüssel dieser Tabelle kann die Nummer des Spielers verwendet werden, da jeder Spieler durch eine eindeutige Nummer identifiziert werden kann. Eine andere Identifikationsmöglichkeit wäre die Zusammensetzung der zwei Spalten Vorname und Nachname zu einem Primärschlüssel.

Spieler_Nr

Nachname

Vorname

Gespielt

1

ElSaddik

Abed

4

2

Fischer

Stephan

6

3

ElSaddik

Abutti

8

4

Frankfurter

Richard

2

Tab. 10.1: Definition einer Spielertabelle

Database Management System (DBMS)

Unter dem Begriff Database Management System versteht man eine Software, mit der Datenbanken erstellt und verwaltet werden können. Handelt es sich um relationale Datenbanken, so wird ein Database Management System (DBMS) auch als Relational Database Management System (RDBMS) bezeichnet. Die Datenbanken Access, DB2, Informix oder miniSQL sind Beispiele für DBMS.

Structured Query Language (SQL)

Die Structured Query Language (SQL) ist eine Sprache, mit der relationale Datenbanken erstellt, manipuliert und abgefragt werden können. SQL ist keine prozedurale Sprache, d. h. bei der Fragestellung wird kein Algorithmus zur Lösung der Frage vorgeschrieben. In prozeduralen Programmiersprachen, wie z. B. Pascal oder C muss der Algorithmus zum Auffinden der gesuchten Informationen angegeben werden.

SQL wurde definiert, um die Arbeit mit relationalen Datenbanken zu vereinfachen. Die Sprache bietet Grundanweisungen, die als Standard für alle RDBMS betrachtet werden können, darunter die folgenden Kommandos:

  • SELECT-Anweisung
    Diese Anweisung wird auch als Anfrage (Query) bezeichnet und wählt aus einer Tabelle Zeilen aus, die einer bestimmten Bedingung genügen. Das folgende SQL-Statement liefert als Ergebnis alle Zeilen einer Tabelle zurück, die die angegebene Bedingung erfüllen.

code 

SELECT * FROM Spieler WHERE Nachname = 'ElSaddik'

    Auf die FROM-Klausel folgt der Namen der Tabelle, aus der die Daten gelesen werden (hier Spieler). In der Ausgabe werden als Resultat alle Spalten angezeigt. Nach dem SELECT-Kommando werden die Spalten aufgelistet, die angezeigt werden sollen. Das Zeichen * steht für hierbei für alle Spalten, die die angegebene Bedingung Nachname = 'ElSaddik' erfüllen.

  • Projection (Projektion)
    Diese Anweisungsart stellt eine Erweiterung von
    SELECT dar, bei der bestimmte Spalten einer Tabelle ausgewählt werden dürfen. Als Beispiel wird folgendes SQL-Statement betrachtet, das als Ergebnis die in Tab. 10-2 angegebenen Daten liefert.

code 

SELECT Nachname, Spieler_Nr FROM Spieler WHERE Gespielt > 5

Nachname

Gespielt

Fischer

6

ElSaddik

8

Tab. 10.2: Ergebnis einer Projektionsabfrage

  • Join (Verbund)
    Ein Join verbindet die Spalten zweier Tabellen. Um eine Verbindung einrichten zu können, müssen die zwei Tabellen eine Spalte gemeinsam haben, die eine reguläre Spalte der einen Tabelle darstellt, die aber zugleich Primärschlüssel der anderen Tabelle ist.
  • Transaction (Transaktion)
    Immer dann, wenn mehrere Personen gleichzeitig auf eine Datenbank zugreifen und verschiedene Anweisungen auf denselben Daten ausführen, können sich Inkonsistenzen der Daten ergeben. DBMS benutzen Transaktionen, um die Konsistenz der Daten bei mehreren gleichzeitigen Zugriffen auf eine Datenbank gewährleisten zu können. Eine Transaktion bezeichnet die Zusammensetzung von mehreren SQL-Anweisungen, die allesamt gleichzeitig angewendet werden müssen. Eine Transaktion muss immer vollständig ausgeführt werden, anderenfalls werden alle Datenänderungen zurückgesetzt. Bei einem Abbruch während der Transaktion, z. B. durch einen Absturz des Servers, wird beim Wiederhochfahren des Servers im Zuge einer automatischen Rekonstruktion der Zustand vor der Transaktion wiederhergestellt.

syntax 

Beginne Transaktion

    Statement1
    Statement2...

Commit Transaktion oder Rollback Transaktion

Eine Transaktion endet entweder mit commit, wodurch die Änderungen bestätigt werden, oder mit rollback, womit die gesamte Transaktion ungültig gemacht wird.

Weitere SQL-Anweisungen

SQL-Anweisungen können in zwei Kategorien eingeteilt werden: In Operationen der Datenmanipulation (Data Manipulating Language, kurz: DML) und in Operationen der Datendefinition (Data Definition Language, kurz: DDL). DML-Anweisungen werden benutzt, um Daten aufzufinden, zu manipulieren oder zu aktualisieren. Bei DDL-Anweisungen wird die Struktur einer Tabelle manipuliert. Nachfolgend ist eine Liste häufig benutzter DML-Anweisungen aufgeführt:

  • SELECT: Auswahl bestimmter Zeilen einer Tabelle.
  • INSERT: Hinzufügen einer oder mehrerer neuer Zeilen zu einer bestehenden Tabelle.
  • DELETE: Löschen einer oder mehrerer Zeilen aus einer bestehenden Tabelle.
  • UPDATE: Aktualisierung einer bestimmten Zelle in einer Tabelle.

Häufig eingesetzte DDL-Anweisungen sind:

  • CREATE TABLE: Erzeugt eine Tabelle nach einer bestimmten Spezifikation.
  • DROP TABLE: Veranlasst das Löschen aller Zeilen einer Tabelle und die Entfernung der Tabellen-Definition aus der Datenbank.
  • ALTER TABLE: Hinzufügen oder Löschen einer bestimmten Spalte aus einer Tabelle.

Nachdem die wichtigsten Begriffe und Anweisungen relationaler Datenbanken erläutert wurden, wird im folgenden Abschnitt auf die JDBC-Architektur eingegangen.


SPNavRight SPNavRight SPNavRight
BuiltByNOF