diff options
| author | Sven Eisenhauer <sven@sven-eisenhauer.net> | 2023-11-10 15:11:48 +0100 |
|---|---|---|
| committer | Sven Eisenhauer <sven@sven-eisenhauer.net> | 2023-11-10 15:11:48 +0100 |
| commit | 33613a85afc4b1481367fbe92a17ee59c240250b (patch) | |
| tree | 670b842326116b376b505ec2263878912fca97e2 /Master/Reference Architectures and Patterns/hjp5/html/k100266.html | |
| download | Studium-master.tar.gz Studium-master.tar.bz2 | |
Diffstat (limited to 'Master/Reference Architectures and Patterns/hjp5/html/k100266.html')
| -rw-r--r-- | Master/Reference Architectures and Patterns/hjp5/html/k100266.html | 285 |
1 files changed, 285 insertions, 0 deletions
diff --git a/Master/Reference Architectures and Patterns/hjp5/html/k100266.html b/Master/Reference Architectures and Patterns/hjp5/html/k100266.html new file mode 100644 index 0000000..96b03c5 --- /dev/null +++ b/Master/Reference Architectures and Patterns/hjp5/html/k100266.html @@ -0,0 +1,285 @@ +<html>
+<head>
+<title>
+Handbuch der Java-Programmierung, 5. Auflage
+</title>
+</head>
+<body>
+<a name="startofbody"></a>
+<script language="JavaScript" src="hjp4lib.js">
+</script>
+<script language="JavaScript">
+installKbdHandler("97,#startofbody;101,#endofbody;116,cover.html;122,k100003.html;115,search.html;105,index.html;100,JDKDOCS;112,APIDOCS;104,k100265.html;106,k100265.html;107,k100267.html;108,k100271.html");
+</script>
+<table border=0 cellpadding=0 cellspacing=1 width="100%">
+<tr bgcolor="#EEFFCC">
+<td width="7%" align=center bgcolor="#DDCC99"><a href="cover.html"> Titel </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100003.html"> Inhalt </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="search.html"> Suchen </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="index.html"> Index </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/index.html" onClick="this.href=getDocIndex()"> DOC </a>
+<td align="right">Handbuch der Java-Programmierung, 5. Auflage
+<tr bgcolor="#EEFFCC">
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100265.html"> << </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100265.html"> < </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100267.html"> > </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100271.html"> >> </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/api/index.html" onClick="this.href=getApiIndex()"> API </a>
+<td align="right">Kapitel 42 - Datenbankzugriffe mit JDBC
+</table>
+<hr>
+
+
+<!-- Section -->
+<a name="sectlevel2id042001"></a>
+<h2>42.1 Einleitung </h2>
+<hr>
+<ul>
+<li><a href="k100266.html#sectlevel2id042001">42.1 Einleitung</a>
+<ul>
+<li><a href="k100266.html#sectlevel3id042001001">42.1.1 Grundsätzliche Arbeitsweise</a>
+<li><a href="k100266.html#sectlevel3id042001002">42.1.2 Die Architektur von JDBC</a>
+<ul>
+<li><a href="k100266.html#sectlevel4id042001002001">Treibertypen</a>
+<li><a href="k100266.html#sectlevel4id042001002002">Mehrstufige Client-Server-Architekturen</a>
+<li><a href="k100266.html#sectlevel4id042001002003">SQL-2 Entry Level</a>
+<li><a href="k100266.html#sectlevel4id042001002004">JDBC-Versionen</a>
+</ul>
+</ul>
+</ul>
+<hr>
+
+<p>
+Wir wollen uns in diesem Abschnitt zunächst mit der grundsätzlichen
+Architektur von JDBC und datenbankbasierten Java-Anwendungen vertraut
+machen. Anschließend werden die wichtigsten Bestandteile der
+JDBC-Schnittstelle vorgestellt und ihre jeweilige Funktionsweise kurz
+erläutert. Der nächste Abschnitt illustriert und verfeinert
+die Konzepte dann an einem praktischen Beispiel, bei dem eine Datenbank
+zur Speicherung von Verzeichnissen und Dateien entworfen, mit Daten
+gefüllt und abgefragt wird. Zum Abschluss werden wir einige spezielle
+Probleme besprechen und auf die Besonderheiten gebräuchlicher
+JDBC-Treiber eingehen.
+
+<p>
+Dieses Kapitel ist typisch für die <i>weiterführenden</i>
+Themen in diesem Buch. JDBC ist ein sehr umfassendes Gebiet, das auf
+den zur Verfügung stehenden Seiten nicht vollständig behandelt
+werden kann. Wir verfolgen statt dessen einen pragmatischen Ansatz,
+bei dem wichtige Grundlagen erläutert werden. Mit Hilfe von Beispielen
+wird ihre praktische Anwendbarkeit demonstriert. Insgesamt müssen
+aber viele Fragen offen bleiben, die durch die Lektüre weiterer
+Dokumentationen geschlossen werden können. Dazu zählen beispielsweise
+<a name="ixa103035"><i>Trigger</i></a>, <a name="ixa103036"><i>Blobs</i></a>
+und <a name="ixa103037"><i>Stored Procedures</i></a>, die Erweiterungen
+in JDBC 2.0 oder die Entwicklung eigener JDBC-Treiber.
+
+<!-- Section -->
+
+<a name="sectlevel3id042001001"></a>
+<h3>42.1.1 Grundsätzliche Arbeitsweise </h3>
+
+<p>
+Kurz nachdem die Version 1.0 des Java Development Kit vorlag, begann
+die Entwicklung einer einheitlichen Datenbankschnittstelle für
+Java-Programme. Anstelle des von vielen Entwicklern erwarteten objektorientierten
+Ansatzes verfolgten die Designer dabei das primäre Ziel, die
+große Zahl vorhandener SQL-Datenbanken problemlos anzubinden.
+In konzeptioneller Anlehnung an die weitverbreitete ODBC-Schnittstelle
+wurde daraufhin mit <a name="ixa103038"><i>JDBC</i></a> (<a name="ixa103039"><i>Java Database
+Connectivity</i></a>) ein standardisiertes
+Java-Datenbank-Interface entwickelt, das mit der Version 1.1 fester
+Bestandteil des JDK wurde.
+
+<p>
+JDBC stellt ein <a name="ixa103040"><i>Call-Level-Interface</i></a>
+zur SQL-Datenbank dar. Bei einer solchen Schnittstelle werden die
+SQL-Anweisungen im Programm als Zeichenketten bearbeitet und zur Ausführung
+an parametrisierbare Methoden übergeben. Rückgabewerte und
+Ergebnismengen werden durch Methodenaufrufe ermittelt und nach einer
+geeigneten Typkonvertierung im Programm weiterverarbeitet.
+
+<p>
+Dem gegenüber steht ein zweites Verfahren, das als <a name="ixa103041"><i>Embedded SQL</i></a>
+(<a name="ixa103042"><i>ESQL</i></a>) bezeichnet wird. Hierbei werden
+die SQL-Anweisungen mit besonderen Schlüsselwörtern direkt
+in den Java-Quelltext eingebettet, und die Kommunikation mit dem Java-Programm
+erfolgt durch speziell deklarierte <a name="ixa103043"><i>Host-Variablen</i></a>.
+Damit der Java-Compiler durch die eingebetteten SQL-Anweisungen nicht
+durcheinandergebracht wird, müssen sie zunächst von einem
+Präprozessor in geeigneten Java-Code übersetzt werden. Während
+Embedded-SQL insbesondere bei Datenbankanwendungen, die in C oder
+C++ geschrieben sind, sehr verbreitet ist, spielt es in Java praktisch
+keine Rolle und konnte sich gegenüber JDBC nicht durchsetzen.
+
+
+<!-- Section -->
+<a name="sectlevel3id042001002"></a>
+<h3>42.1.2 Die Architektur von JDBC </h3>
+
+
+<!-- Section -->
+<a name="sectlevel4id042001002001"></a>
+<h4>Treibertypen </h4>
+
+<p>
+JDBC ist keine eigene Datenbank, sondern eine Schnittstelle zwischen
+einer SQL-Datenbank und der Applikation, die sie benutzen will. Bezüglich
+der Architektur der zugehörigen Verbindungs-, Anweisungs- und
+Ergebnisklassen unterscheidet man vier Typen von JDBC-Treibern:
+<ul>
+<li>Steht bereits ein <a name="ixa103044"><i>ODBC-Treiber</i></a>
+zur Verfügung, so kann er mit Hilfe der im Lieferumfang enthaltenen
+<a name="ixa103045"><i>JDBC-ODBC-Bridge</i></a> in Java-Programmen
+verwendet werden. Diese Konstruktion bezeichnet man als <i>Typ-1-Treiber</i>.
+Mit seiner Hilfe können alle Datenquellen, für die ein ODBC-Treiber
+existiert, in Java-Programmen genutzt werden.
+<li>Zu vielen Datenbanken gibt es neben ODBC-Treibern auch <i>spezielle</i>
+Treiber des jeweiligen Datenbankherstellers. Setzt ein JDBC-Treiber
+auf einem solchen proprietären Treiber auf, bezeichnet man ihn
+als <i>Typ-2-Treiber</i>.
+<li>Wenn ein JDBC-Treiber komplett in Java geschrieben und auf dem
+Client keine spezielle Installation erforderlich ist, der Treiber
+zur Kommunikation mit einer Datenbank aber auf eine funktionierende
+<a name="ixa103046"><i>Middleware</i></a> angewiesen ist, handelt
+es sich um einen <i>Typ-3-Treiber</i>.
+<li>Falls ein JDBC-Treiber komplett in Java geschrieben ist und die
+JDBC-Calls direkt in das erforderliche Protokoll der jeweiligen Datenbank
+umsetzt, handelt es sich um einen <i>Typ-4-Treiber</i>.
+</ul>
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100%>
+<tr>
+<td width=1 align=left valign=top bgcolor="#CC0000"><img src="trp1_1.gif"></td>
+<td><img src="trp1_1.gif" width=1></td>
+<td width=1 align=left valign=top bgcolor="#CC0000"><img src="trp1_1.gif"></td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top width=1000>
+
+<p>
+Die JDBC-Treibertypen sind im übrigen nicht zu verwechseln mit
+der der vom jeweiligen JDK unterstützen <i>JDBC-Version</i>.
+Diese wird etwas später in diesem Absatz vorgestellt.</td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top>
+<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#CC0000">
+<tr>
+<td><font color="#FFFFFF"> Warnung </font></td>
+</tr>
+</table>
+</td>
+<td width=1 align=left valign=top bgcolor="#CC0000"><img src="trp1_1.gif"></td>
+</tr>
+</table>
+
+
+<!-- Section -->
+<a name="sectlevel4id042001002002"></a>
+<h4><a name="ixa103047">Mehrstufige Client-Server-Architekturen</a></h4>
+
+<p>
+Während die Typ-1- und Typ-2-Treiber lokal installierte und konfigurierte
+Software erfordern (die jeweiligen ODBC- bzw. herstellerspezifischen
+Treiber), ist dies bei Typ-3- und Typ-4-Treibern normalerweise nicht
+der Fall. Hier können die zur Anbindung an die Datenbank erforderlichen
+Klassendateien zusammen mit der Applikation oder dem Applet aus dem
+Netz geladen und ggfs. automatisch aktualisiert werden. Nach der Veröffentlichung
+von JDBC gab es zunächst gar keine Typ-3- oder Typ-4-Treiber.
+Mittlerweile haben sich aber alle namhaften Datenbankhersteller zu
+Java bekannt und stellen auch Typ-3- oder Typ-4-Treiber zur Verfügung.
+Daneben gibt es eine ganze Reihe von Fremdherstellern, die JDBC-Treiber
+zur Anbindung bekannter Datenbanksysteme zur Verfügung stellen.
+
+<p>
+Mit JDBC können sowohl zwei- als auch drei- oder höherstufige
+Client-Server-Systeme aufgebaut werden (<a name="ixa103048"><i>Multi-Tier-Architekturen</i></a>).
+Während bei den zweistufigen Systemen eine Aufteilung der Applikation
+in Datenbank (Server) und Arbeitsplatz (Client) vorgenommen wird,
+gibt es bei den dreistufigen Systemen noch eine weitere Schicht, die
+zwischen beiden Komponenten liegt. Sie wird gemeinhin als <a name="ixa103049"><i>Applikations-Server</i></a>
+bezeichnet und dient dazu, komplexe Operationen vom Arbeitsplatz weg
+zu verlagern. Der Applikations-Server ist dazu mit dem Datenbank-Server
+verbunden und kommuniziert mit diesem über ein standardisiertes
+Protokoll (z.B. JDBC). Den Arbeitsplätzen stellt er dagegen höherwertige
+Dienste (z.B. komplette Business-Transaktionen) zur Verfügung
+und kommuniziert mit ihnen über ein spezielles Anwendungsprotokoll
+(z.B. HTTP, RMI, CORBA oder andere).
+
+<!-- Section -->
+
+<a name="sectlevel4id042001002003"></a>
+<h4>SQL-2 Entry Level </h4>
+
+<p>
+JDBC übernimmt die Aufgabe eines »Transportprotokolls«
+zwischen Datenbank und Anwendung und definiert damit zunächst
+noch nicht, welche SQL-Kommandos übertragen werden dürfen
+und welche nicht. Tatsächlich verwendet heute jede relationale
+Datenbank ihren eigenen SQL-Dialekt, und eine Portierung auf eine
+andere Datenbank ist nicht selten aufwändiger als ein Wechsel
+des Compilers.
+
+<p>
+Um einen minimalen Anspruch an Standardisierung zu gewährleisten,
+fordert SUN von den JDBC-Treiberherstellern, mindestens den <a name="ixa103050"><i>SQL-2
+Entry-Level-Standard</i></a> von 1992 zu erfüllen.
+Mit Hilfe einer von SUN erhältlichen Testsuite können die
+Hersteller ihre JDBC-Treiber auf Konformität testen. Da praktisch
+alle großen Datenbanken in ihrer Funktionalität weit über
+besagten Standard hinausgehen, ist bei Verwendung dieser Features
+möglicherweise mit erheblichem Portierungsaufwand zu rechnen.
+
+
+<!-- Section -->
+<a name="sectlevel4id042001002004"></a>
+<h4><a name="ixa103051">JDBC-Versionen</a></h4>
+
+<p>
+Genauso, wie sich der Umfang der einzelnen JDKs immer weiter gesteigert
+hat, ist auch die Leistungsfähigkeit der JDBC-Schnittstelle kontinuierlich
+gestiegen. Um dies zu verdeutlichen trägt die jeweils unterstützte
+JDBC-Version eine eigene Versionsnummer:
+<ul>
+<li>Erstmals wurde die JDBC 1997 mit der Version 1.0 in das JDK 1.1
+integriert. Dieses JDBC-Version basiert auf dem SQL-Standard SQL-92.
+<li>Die Version 2.0 der JDBC-API wurde mit dem JDK 1.2 eingeführt
+und berücksichtigt bereits die Erweiterungen von SQL-99. Um den
+Herstellern die Implementierung von Treibern zu erleichtern, wurde
+die API mit dieser Version in 2 Pakete aufgeteilt. Das als JDBC 1.0
+Core API bezeichnete Paket findet sich im Namensraum <font color="#000077"><tt>java.sql</tt></font>
+und ist fester Bestandteil des JDK, während sich die Klassen
+des so genannten JDBC 2.0 Optional Package sich im Namensraum <font color="#000077"><tt>javax.sql</tt></font>
+befinden.
+<li>Seit dem JDK 1.4 trägt die JDBC-API die Versionsnummer 3.0.
+Diese wurde abermals um weitere Datentypen wie <font color="#000077"><tt>Boolean</tt></font>
+und <a href="index_d.html#ixb102238"><font color=#000080><tt>DataLink</tt></font></a>
+erweitert und unterstützt zum Beispiel vorbereitete Statements
+(<font color="#000077"><tt>PreparedStatement</tt></font>) und Sicherungspunkte
+(SavePoints) in einer laufenden Transaktion.
+<li>Das JDK 6 integriert nun die JDBC-Version 4.0, welche neue SQL-2003
+Datentypen für XML unterstützt und die Verwendung von Annotationen
+gestattet. Derzeit sind JDBC 4-Treiber allerdings noch sehr selten
+verfügbar.
+</ul>
+<hr>
+<table border=0 cellpadding=0 cellspacing=1 width="100%">
+<tr bgcolor="#EEFFCC">
+<td width="7%" align=center bgcolor="#DDCC99"><a href="cover.html"> Titel </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100003.html"> Inhalt </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="search.html"> Suchen </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="index.html"> Index </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/index.html" onClick="this.href=getDocIndex()"> DOC </a>
+<td align="right">Handbuch der Java-Programmierung, 5. Auflage, Addison
+Wesley, Version 5.0.1
+<tr bgcolor="#EEFFCC">
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100265.html"> << </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100265.html"> < </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100267.html"> > </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100271.html"> >> </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/api/index.html" onClick="this.href=getApiIndex()"> API </a>
+<td align="right">© 1998, 2007 Guido Krüger & Thomas
+Stark, <a href="http://www.javabuch.de">http://www.javabuch.de</a>
+</table>
+<a name="endofbody"></a>
+</body>
+</html>
|
