Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Vorwort
1 Java ist auch eine Sprache
2 Sprachbeschreibung
3 Klassen und Objekte
4 Der Umgang mit Zeichenketten
5 Mathematisches
6 Eigene Klassen schreiben
7 Angewandte Objektorientierung
8 Exceptions
9 Generics, innere Klassen
10 Die Klassenbibliothek
11 Threads und nebenläufige Programmierung
12 Datenstrukturen und Algorithmen
13 Raum und Zeit
14 Dateien und Datenströme
15 Die eXtensible Markup Language (XML)
16 Grafische Oberflächen mit Swing
17 Grafikprogrammierung
18 Netzwerkprogrammierung
19 Verteilte Programmierung mit RMI und Web–Services
20 JavaServer Pages und Servlets
21 Applets
22 Midlets und die Java ME
23 Datenbankmanagement mit JDBC
24 Reflection und Annotationen
25 Logging und Monitoring
26 Sicherheitskonzepte
27 Java Native Interface (JNI)
28 Dienstprogramme für die Java-Umgebung
Stichwort

Download:
- ZIP, ca. 14,1 MB
Buch bestellen
Ihre Meinung?

Spacer
<< zurück
Java ist auch eine Insel (8. Auflage) von Christian Ullenboom
Programmieren mit der Java Standard Edition Version 6
Buch: Java ist auch eine Insel (8. Auflage)

Java ist auch eine Insel (8. Aufl.)
8., aktual. Auflage, geb., mit DVD
1.475 S., 49,90 Euro
Galileo Computing
ISBN 978-3-8362-1371-4
Pfeil 23 Datenbankmanagement mit JDBC
Pfeil 23.1 Das relationale Modell
Pfeil 23.2 Datenbanken und Tools
Pfeil 23.2.1 HSQLDB
Pfeil 23.2.2 Weitere Datenbanken
Pfeil 23.2.3 Eclipse-Plugins zum Durchschauen von Datenbanken
Pfeil 23.3 JDBC und Datenbanktreiber
Pfeil 23.3.1 Treibertypen
Pfeil 23.3.2 JDBC-Versionen
Pfeil 23.4 Eine Beispielabfrage
Pfeil 23.4.1 Schritte zur Datenbankabfrage
Pfeil 23.4.2 Client für HSQLDB-Datenbank
Pfeil 23.5 Mit Java an eine Datenbank andocken
Pfeil 23.5.1 Der Treiber-Manager
Pfeil 23.5.2 Den Treiber laden
Pfeil 23.5.3 Eine Aufzählung aller Treiber
Pfeil 23.5.4 Log-Informationen
Pfeil 23.5.5 Verbindung zur Datenbank auf- und abbauen
Pfeil 23.5.6 DataSource
Pfeil 23.5.7 Gepoolte Verbindungen
Pfeil 23.6 Datenbankabfragen
Pfeil 23.6.1 Abfragen über das Statement-Objekt
Pfeil 23.6.2 Ergebnisse einer Abfrage in ResultSet
Pfeil 23.6.3 Java und SQL-Datentypen
Pfeil 23.6.4 Unicode in der Spalte korrekt auslesen
Pfeil 23.6.5 Eine SQL-NULL und wasNull() bei ResultSet
Pfeil 23.6.6 Wie viele Zeilen hat ein ResultSet?
Pfeil 23.7 Die Ausnahmen bei JDBC
Pfeil 23.8 Elemente einer Datenbank hinzufügen und aktualisieren
Pfeil 23.8.1 Batch-Updates
Pfeil 23.9 ResultSets in Bohnen durch RowSet
Pfeil 23.9.1 Die Schnittstelle RowSet
Pfeil 23.9.2 Implementierungen von RowSet
Pfeil 23.9.3 Der Typ CachedRowSet
Pfeil 23.9.4 Der Typ WebRowSet
Pfeil 23.10 Vorbereitete Anweisungen (Prepared Statements)
Pfeil 23.10.1 PreparedStatement-Objekte vorbereiten
Pfeil 23.10.2 Werte für die Platzhalter eines PreparedStatement
Pfeil 23.11 Transaktionen
Pfeil 23.12 Metadaten
Pfeil 23.12.1 Metadaten über die Tabelle
Pfeil 23.12.2 Informationen über die Datenbank
Pfeil 23.13 Einführung in SQL
Pfeil 23.13.1 Ein Rundgang durch SQL-Abfragen
Pfeil 23.13.2 Datenabfrage mit der Data Query Language (DQL)
Pfeil 23.13.3 Tabellen mit der Data Definition Language (DDL) anlegen
Pfeil 23.14 Zum Weiterlesen


Galileo Computing - Zum Seitenanfang

23.13 Einführung in SQL Zur nächsten ÜberschriftZur vorigen Überschrift

SQL ist die bedeutendste Abfragesprache für relationale Datenbanken, in der Benutzer angeben, auf welche Daten sie zugreifen möchten. [Bei einer OODB ist dies OQL und bei XML-Datenbanken in der Regel XQuery.] Obgleich die Bezeichnung »Abfragesprache« etwas irreführend klingt, beinhaltet sie auch Befehle zur Datenmanipulation und Datendefinition, um beispielsweise neue Tabellen zu erstellen. Nachdem Anfang der 1970er Jahre das relationale Modell für Datenbanken populär geworden war, entstand im IBM-Forschungslabor San José (jetzt Almaden) ein Datenbanksystem namens »System R«. Das relationale Modell wurde 1970 von Dr. Edgar F. Codd [1981 erhielt er für seine Arbeit mit relationalen Datenbanken den Turing-Award – eine Art Nobelpreis für Informatiker.] entwickelt. System R bot eine Abfragesprache, die SEQUEL (Structured English Query Language) genannt wurde. Später wurde SEQUEL in SQL umbenannt. Da sich relationale Systeme großer Beliebtheit erfreuten, wurde 1986 die erste SQL-Norm vom ANSI-Konsortium verabschiedet. 1988 wurde der Standard geändert, und 1992 entstand die zweite Version von SQL (SQL-2 beziehungsweise SQL-92 genannt). Da die wichtigen Datenbanken alle SQL-2 verarbeiten, kann ein Programm über diese Befehle die Datenbank steuern, ohne verschiedene proprietäre Schnittstellen nutzen zu müssen. Dennoch können über SQL die speziellen Leistungen einer Datenbank genutzt werden.


Tabelle 23.4 Entwicklung von SQL

Sprache Entwicklung

SQUARE

1975

SEQUEL

1975, IBM Research Labs San José

SEQUEL2

1976, IBM Research Labs San José

SQL

1982, IBM

ANSI-SQL

1986

ISO-SQL (SQL 89, SQL-1)

1989, drei Sprachen: Level 1, Level 2, +IEF

SQL-2 (bzw. SQL-92)

1992

SQL-3 (auch SQL-1999)

1999


Damit sich ein Datenbanktreiber JDBC-kompatibel nennen kann, muss er mindestens SQL-92 unterstützen. Das bedeutet jedoch nicht, dass die existierenden Treiber alle Eigenschaften von SQL-92 implementieren müssen; über Kannst-du-Methoden lässt sich der Treiber fragen, ob er Eigenschaften unterstützt oder nicht.


Galileo Computing - Zum Seitenanfang

23.13.1 Ein Rundgang durch SQL-Abfragen Zur nächsten ÜberschriftZur vorigen Überschrift

Da das Wort »Abfragesprache« eine Art Programmiersprache suggeriert, sind wir an einem Beispiel interessiert. Um es vorwegzusagen: Es gibt nur eine Handvoll wichtiger Befehle, und SELECT, UPDATE und CREATE decken schon einen Großteil davon ab. Obwohl die Groß- und Kleinschreibung der Befehle unbedeutend ist, sind sie zwecks besserer Lesbarkeit im Folgenden großgeschrieben.


Beispiel Eine einfache Abfrage in SQL:

SELECT Lfr_Name 
FROM Lieferanten

Die Tabellen und Spalten sind auch für die folgenden Beispiele fiktiv.


Tabellen nehmen die Benutzerdaten auf, und mit dem Kommando FROM wählen wir die Tabelle Lieferanten aus, die für die Berechnung erforderlich ist. Die Tabelle Lieferanten enthält drei Attribute (die Spalten), die wir mit SELECT auswählen. In einer Datenbank werden normalerweise mehrere Tabellen verwendet, ein so genanntes Datenbankschema. Jede Tabelle gehört zu genau einem Schema.

SQL-Abfragen sind nahe an der Umgangssprache formuliert. Im oberen Beispiel liest sich die Abfrage einfach als: »Wähle die Spalte Lfr_Name aus der Tabelle Lieferanten«. Der Designer einer Datenbank muss sich natürlich vor der Umsetzung der Tabellen und somit der Relationen gründlich Gedanken machen. Eine spätere Änderung der Struktur wird nämlich teuer. So muss schon am Anfang einkalkuliert werden, welche Daten in welchen Ausprägungen auftreten können. Nach Statistiken der amerikanischen Library of Congress verdoppelt sich insgesamt alle fünf Jahre die Informationsmenge. Was wäre, wenn diese Informationen alles Einträge in einer endlos verzweigten Datenbank wären und jemand feststellen würde, dass das Tabellenschema ungünstig ist? Datenbankdesigner nennen den Vorgang von einem ersten Modell bis zur fertigen Relation Normalisierung.

Bevor wir mit den einzelnen Sprachelementen von SQL fortfahren, an dieser Stelle einige Regeln für SQL-Ausdrücke:

  • Die SQL-Anweisungen sind unabhängig von der Groß- und Kleinschreibung. Im Text sind die SQL-Kommandos großgeschrieben, damit die Ausdrücke besser lesbar sind.
  • Leerzeichen, Return und Tabulatoren sind in einer Abfrage bedeutungslos. Im Folgenden werden zur besseren Lesbarkeit Zeilenumbrüche verwendet.
  • SQL-Anweisungen werden mit einer Zeichenkette abgeschlossen. Sie unterscheidet sich aber von Datenbank zu Datenbank. Häufig ist dies ein Semikolon; es kann aber auch ein \go sein. Wir werden die Anweisungen in den Beispielen nicht abschließen, da JDBC diesen Abschluss automatisch vornimmt.

Wir werden uns im Folgenden etwas intensiver um SQL-Abfragen kümmern. Es zeigt sich, dass eine einzelne SQL-Anweisung sehr ausdrucksstark sein kann. JDBC hat mit dieser Ausdrucksstärke aber nichts zu schaffen, es kennt nicht einmal ihre Korrektheit. JDBC leitet den SQL-Befehl einfach an den Treiber, und dieser leitet das Kommando an die Datenbank weiter.

SQL gliedert sich in eine Reihe von unterschiedlichen Abfragetypen – die einen sind mehr mit der Modifikation von Daten, die anderen eher mit deren Abfrage beschäftigt. Anbei die wichtigsten drei Sprachen:

  • DDL (Data Definition Language). Erstellen der Tabellen, Beziehungen (mit Schlüsseln) und Indizes. Typische SQL-Anweisungen sind: CREATE/DROP DATABASE, CREATE/DROP INDEX, CREATE/DROP SYNONYM, CREATE/DROP TABLE, CREATE/DROP VIEW.
  • DML (Data Manipulation Language). Daten hinzufügen und löschen. Typische SQL-Anweisungen sind hier: INSERT, DELETE, UPDATE.
  • DQL (Data Query Language). Daten auswählen und filtern. Die typischste SQL-Anweisung ist SELECT mit den Spezialisierungen ALL, DISTINCT, ORDER BY, GROUP BY, HAVING, Unterabfragen (IN, ANY, ALL, EXISTS), Schnittmengen und Joins.

Galileo Computing - Zum Seitenanfang

23.13.2 Datenabfrage mit der Data Query Language (DQL) Zur nächsten ÜberschriftZur vorigen Überschrift

DQL sind Abfragekommandos, um auf die Inhalte zuzugreifen. In SQL steckt auch schon das Wort »Query«, unsere Abfrage. Das wichtigste Element ist hierbei das oben bereits erwähnte SELECT.

SELECT {Feldname, Feldname,..|*} ( * = alle Felder ) 
FROM Tabelle [, Tabelle, Tabelle....] 
[WHERE {Bedingung}] 
[ORDER BY Feldname [ASC|DESC]...] 
[GROUP BY Feldname [HAVING {Bedingung}]]

Das Angenehme an SQL ist die Tatsache, dass wir uns nicht um das Wie kümmern müssen, sondern nur um das Was. Wir fragen also etwa: »Welche Lieferanten wohnen in Aalen?«, und formulieren:

SELECT Lfr_Name 
FROM Lieferanten 
WHERE Wohnort='Aalen'

Dabei ist es uns egal, wie die Datenbankimplementierung mit dieser Abfrage umgeht. Hier unterscheiden sich auch die Anbieter in ihrer Leistungsfähigkeit und in den Preisen.

Kümmern wir uns nun um die verschiedenen Schreibweisen von SELECT. Geben wir in SELECT einen Spaltennamen oder Spaltenindex an, so bekommen wir nur die Ergebnisse dieser Spalte zurück. Eine Abfrage mit »*« liefert alle Spalten zurück. Damit wir also nicht nur den Namen des Kunden bekommen, sondern auch die anderen Angaben – um ihm gleich einen Auftrag zu geben –, schreiben wir Folgendes, um eine Liste aller Lieferanten in Aalen zu erhalten:

SELECT * FROM Lieferanten WHERE Wohnort='Aalen'

Wir sehen, dass es keinen Unterschied macht, ob die Abfragen in mehrere Zeilen aufgespaltet sind oder in einer Zeile stehen.

Zeilen ausfiltern und logische Operatoren

Die SELECT-Anweisung geht über die Spalten, und die WHERE-Angabe filtert Zeilen nach einem Kriterium heraus. Wir haben zunächst mit einer Gleich-Abfrage gearbeitet. SQL kennt die üblichen Vergleichsoperatoren: = gleich, <> ungleich, > größer, < kleiner, >= größer gleich, <= kleiner gleich. Vergleiche werden mit einem einfachen Gleichheitszeichen und nicht durch == formuliert. Die Vergleichsoperatoren lassen sich durch die Operatoren AND, OR und NOT weiter verfeinern. Bei numerischen Daten können wir auch die Rechenoperatoren (+, –, *, /) anwenden. An Stelle vielfacher AND-Abfragen lässt sich mit zwei SQL-Anweisungen auch der Wertebereich weiter einschränken. Die Einschränkung BETWEEN Wert1 AND Wert2 testet, ob sich ein Vergleichswert zwischen Wert1 und Wert2 befindet. Und IN (Werteliste) prüft, ob der Vergleichswert in der angegebenen Werteliste liegt. Für Zeichenketten spielt noch LIKE eine Rolle, da hier ein Mustervergleich vorgenommen werden kann. IS NULL erlaubt die Abfrage nach einem NULL-Wert in der Spalte.

Wenn wir diese SQL-Anweisung von der Datenbank ausführen lassen, wollen wir die Daten gern entsprechend dem Preis sortiert haben. Dazu lässt sich die SELECT-Anweisung mit einem ORDER BY versehen. Dahinter folgt die Spalte, nach der sortiert wird. Jetzt wird die Tabelle aufsteigend sortiert, also der kleinste Wert unten. Wünschen wir die Sortierung absteigend, dann setzen wir noch DESC hintenan.

Wir wollen nun die Informationen mehrerer Tabellen miteinander verbinden. Dazu führen wir eine Tupel-Variable ein. Diese kann eingesetzt werden, wenn sich Attribute nicht eindeutig den Relationen zuordnen lassen. Dies ist genau dann der Fall, wenn zwei Relationen verbunden werden sollen und beide den gleichen Attributnamen besitzen.


Beispiel Die SQL-Anweisung zeigt die Verwendung der Variablen, die hier jedoch nicht erforderlich ist, weil wir nur eine Tabelle verwenden.

SELECT L.Lfr_Name, L.Wohnort 
FROM Lieferanten L 
WHERE L.Wohnort = 'Aalen'

Der Buchstabe »L« ist hier nur eine Abkürzung, eine Art Variable. Abkürzungen für Spalten werden in SQL auch mit AS abgetrennt, etwa so:

FROM Lieferant AS L

Dann lässt sich auf die Spalte Lieferant in der Tabelle Lieferanten kurz mit L zugreifen.

Gruppenfunktionen

Mit Gruppenfunktionen (auch Aggregationsfunktionen) lassen sich zum Beispiel Durchschnittswerte oder Minima über Spalten beziehen. Sie liefern genau einen Wert, beziehen sich jedoch auf mehrere Tabellenzeilen. Die folgende Abfrage zählt alle Anbieter aus Aalen:

SELECT COUNT(*) 
FROM Lieferanten 
WHERE Wohnort = 'Aalen'

Die Spalten, die die Gruppenfunktion bearbeiten, stehen in Klammern hinter dem Namen. Die SQL-Standardfunktionen (es gibt datenbankabhängig noch viel mehr) sind in der folgenden Tabelle aufgeführt:


Tabelle 23.5 Die Standardfunktionen in SQL

AVG

Durchschnittswert

COUNT

Anzahl aller Einträge

MAX

Maximalwert

MIN

Minimalwert

SUM

Summe aller Einträge in einer Spalte



Galileo Computing - Zum Seitenanfang

23.13.3 Tabellen mit der Data Definition Language (DDL) anlegen topZur vorigen Überschrift

Die SQL-Anweisung CREATE TABLE legt eine neue Tabelle (Relation) an. Dazu gibt die Anweisung die Spalten (Attribute) mit ihren Wertebereichen an. Optional lassen sich Integritäts-bedingungen definieren, etwa, ob eine Spalte mit einem Eintrag belegt sein muss (NOT NULL) oder welcher Fremdschlüssel eingetragen ist.

CREATE TABLE Tabelle 
      (Spaltendefinition [,Spaltendefinition] ... 
      [, Primärschlüsseldefinition] 
      [, Fremdschlüsseldefinition 
      [,Fremdschlüsseldefinition] ... ] ) 
      [IN Tabellenspace] 
      [INDEX IN Tabellenspace2] 
      [LONG IN Tabellenspace3];


Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.






<< zurück
  Zum Katalog
Zum Katalog: Java ist auch eine Insel





Java ist auch eine Insel
Jetzt bestellen


 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Tipp
Zum Katalog: Coding for Fun





 Coding for Fun


 Buchempfehlungen
Zum Katalog: Objektorientierte Programmierung





 Objektorientierte
 Programmierung


Zum Katalog: Einstieg in Eclipse 3.4






 Einstieg in
 Eclipse 3.4


Zum Katalog: Java 6 lernen mit Eclipse






 Java 6 lernen
 mit Eclipse


Zum Katalog: NetBeans Platform 6






 NetBeans
 Platform 6


Zum Katalog: Java und XML






 Java und XML


Zum Katalog: Visual C# 2008






 Visual C# 2008


Zum Katalog: IT-Handbuch für Fachinformatiker






 IT-Handbuch für
 Fachinformatiker


Zum Katalog: C++ von A bis Z






 C++ von A bis Z


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo




Copyright © Galileo Press 2009
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de