• Keine Ergebnisse gefunden

Java und JDBC

N/A
N/A
Protected

Academic year: 2022

Aktie "Java und JDBC"

Copied!
23
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Java und JDBC TM

Datenbankanwendungen mit Java

und JDBC

(2)

Inhalt

1. Ziel von Datenbanken im Internet und Intranet 2. Java und JDBC kurz und bündig

3. ODBC und Java 4. JDBC

5. JDBC-Treibertypen 6. OpenLink-Middleware

7. Struktur einer JDBC-Anwendung 8. Servlets und JDBC

9. Beispiele ...

(3)

1. Ziel von Datenbanken im Internet und Intranet

Beispiele:

1. Internes Telefonverzeichnis eines Unternehmens

 Verfügbarmachen d. Verzeichnisses in Online-Form für alle Mitarbeiter 2. Warenwirtschaftssystem arbeitet als Datenbankanwendung mit einem sehr

großen Datenbestand

 Datenauswertungen und Eingabemöglichkeiten an allen Arbeitsplätzen ...

Ziel: "Information at your fingertips" - sämtliche Informationen laufen am __Arbeitsplatz des Mitarbeiters zusammen.

Bill Gates, der den obigen Begiff prägte, stellt sich überall Windows-Systeme vor:

auf jedem Arbeitsplatz als Desktop-System und im "BackOffice" als Server.

Dank WWW und Java ist diese Ausschließlichkeit nicht zwingend.

(4)

2. Java und JDBC kurz und bündig

Ein wichtiger Grund für die in so kurzer Zeit derart weite Verbreitung der von Sun Microsystems entwickelten Programmiersprache Java liegt in der Plattformunab- hängigkeit der Sprache.

Einzige Voraussetzung für Java ist eine Java-Laufzeitumgebung mit ihrer zentralen Komponente, der Java Virtual Machine (JVM).

Die Übersetzung eines Java-Quellprogramms erzeugt einen sog. Bytecode.

Was bringt JDBC?

Mit JDBC hat Sun Microsystems einen Standard definiert, um aus Java-Programmen heraus auf relationale Datenbanksysteme zugreifen zu können. JDBC steht für Java Database Connectivity. JDBC stellt ein API (Application Programming Interface) zur Verfügung.

(5)

2. Java und JDBC kurz und bündig

Zwei Besonderheiten zeichnen JDBC aus:

 Der Datenbankzugriff erfolgt unabhängig vom verwendeten DBMS. Der Datenbank-Client braucht (und sollte) nicht mit einem bestimmten DBMS "im Hinterkopf" entwickelt werden.

 Alle DBMS-spezifischen Details übernimmt ein JDBC-Treiber. Er ist ebenfalls in Java geschrieben und wird von den Datenbankherstellern oder von Dritten angeboten.

(6)

3. ODBC und Java

Das von Microsoft spezifizierte ODBC (Open Database Connectivity) bietet Daten- bank-Clients ein einheitliches Verfahren zum Zugriff auf Datenbanksysteme

verschiedener Hersteller.

Frage: Warum nutzt Java nicht einfach ODBC um auf Datenbanken zuzugreifen?

Antwort: Dies ist im allgemeinen nicht möglich oder zumindest nicht

wünschenswert, weil dadurch die Plattformunabhängigkeit der Java- Anwendung auf der Strecke bleibt.

Grund: ODBC ist ein API für C und C++. Nur C- und C++-Programme sind in der Lage, die ODBC-Schnittstellen zu nutzen und die im Standard definierten Funktionen aufzurufen.

(7)

4. JDBC

 Vermeidung der genannten Einschränkungen

 Funktion ähnlich ODBC, lediglich Datenstrukturen sind anders

 keine Pointer und Handles, sondern Klassen, Objekte und Methoden

 JDBC-Anwendung öffnet eine Datenbank eines beliebigen DBMS

 Voraussetzung: JDBC-Treiber für dieses DBMS

 Ein JDBC-Treiber ist in Java geschrieben und wird vom Programm zur Laufzeit hinzugeladen

 Portabilität ist gegeben, da Implementierung in Java

 JDBC spezifiziert das API und bietet mit der Komponente JDBC-Treibermanager einen Rahmen für JDBC-Treiber

 Konkrete JDBC-Treiber für konkrete Datenbanksysteme enthält JDBC nicht !

 solche Treiber stammen von den Datenbankherstellern

 deshalb braucht man nicht damit rechnen, daß man mit einem Treiber des 

 Herstellers A auf das DBMS des Herstellers B zugreifen kann.

(8)

4. JDBC

Strategische Vorteile von JDBC:

 Datenbank-Client ist unabhängig von einer best. Zielplattform.

 Datenbanklösung ist unabhängig von der Serverplattform.

 Anwendung ist durch JDBC unabhängig vom DBMS, da JDBC-Treiber für praktisch alle DBMS verfügbar sind.

Das Unternehmen, das eine JDBC-Lösung einsetzt, hat damit alle Daten überall im Intranet verfügbar, ganz gleich, mit welchem Rechnertyp der Benutzer arbeitet und ganz gleich, in welchem Datenbanksystem und auf welcher Maschine die Daten vorliegen.

JDBC macht es auch möglich, Daten aus ganz unterschiedlichen Systemen innerhalb

der Anwendung zusammenzuführen.

(9)

5. JDBC-Treibertypen

 Ein JDBC-Treiber stellt für den Client eine einheitliche Schnittstelle zur Verfügung.

 Jeder Treiber ist auf ein bestimmtes DBMS bzw. auf ein bestimmtes Zugriffs- ---verfahren nach dem Zwei- oder Dreischichtenmodell zugeschnitten.

 Das Zweischichtenmodell realisiert einen einfachen Client-/Server- Datenbank---zugang.

 Das Dreischichten- oder Mehrschichtenmodell führt zwischen Client und Server ---eine weitere Schicht ein, die den Client vom DBMS unabhängig macht und so die ---Probleme des Zweischichtenmodells vermeidet. Die Zwischenschicht wird ---Middleware genannt.

--Der Client wendet sich zum Öffnen der DB nicht direkt an das DBMS, sondern an ---die Middleware. Die gewünschte DB spezifiziert der Client bei JDBC mit einem ---JDBC-URL. Die Middleware analysiert diesen und lädt den benötigten

DBMS---Treiber, der seinerseits die Verbindung zur DB herstellt.

 Vier Typen von JDBC-Treibern sind zu unterscheiden (siehe nächste Folie).

(10)

5. JDBC-Treibertypen

1. Typ 1 ist eine JDBC-ODBC-Bridge - eine einfache Lösung für beliebige ODBC-Datenbanken

Vorteil: Kann bereits zu einem frühen Zeitpunkt auf sämtliche ODBC-Datenbanken zugreifen

Nachteil: Nicht ausschließlich Bytecode, daher nicht portabel und plattformunabhängig

2. Typ 2 ist eine Art Zwischenlösung z.B. für DB-Hersteller, der den bereits bestehenden Treiber (z.B. C) seines DBMS hernimmt und eine JDBC-Schicht oben aufsetzt Nachteile: siehe 1.

3. Typ 3 ist ein hundertprozentiger Java-Treiber, mit der größtmöglichen Flexibilität und fügt sich nahtlos in das Dreischichtenmodell ein.

4. Typ 4 ist ebenfalls ein reiner Java-Treiber, entspricht aber dem Zweischichtenmodell

Java-Anwendung JDBC-Treibermanager

JDBC-ODBC- Bridge-Treiber ODBC-Treiber

Treiber für DBMS B (Java)

Treiber für DBMS B (C)

Standard JDBC-Treiber

Treiber für DBMS D (Java)

Middleware

DBMS A DBMS B DBMS C DBMS D

Typ 1 Typ 2 Typ 3 Typ 4

Abb.: JDBC-Treibertypen

(11)

6. OpenLink-Middleware

Die OpenLink Software Ltd. Bietet eine leistungsfähige und hochperformante Middleware, die eine universelle Infrastruktur für Datenbankzugriffe bereitstellt.

OpenLink Request Broker Java-Anwendung

OpenLink-JDBC-Treiber

ODBC- Agent

Informix Oracle    ODBC-DB C++ / C-Anwendung

OpenLink-ODBC-Treiber

Oracle- Agent Informix-

Agent   

Abb.: Die OpenLink-Middleware

(12)

7. Struktur einer JDBC-Anwendung

Ein in Java geschriebener Datenbank-Client besitzt einen bestimmten Grundaufbau, um seine Aufgaben mit Hilfe von JDBC zu erledigen.

Folgende Schritte sollte jedes JDBC-Programm ausführen:

1. Laden eines JDBC-Treibers 2. Öffnen einer Datenbank

3. Senden von SQL-Anweisungen an die Datenbank 4. Auslesen und Bearbeiten der Ergebnisse

5. Schliessen der Datenbank

(13)

7. Struktur einer JDBC-Anwendung

Zu 1. Der erste Schritt auf dem Weg zur DB ist das Laden eines JDBC-Treibers

h

Class.forName("openlink.jdbc.Driver");

h

Wird der Treiber nicht gefunden, wird die Ausnahme java.lang.ClassNotFoundException erzeugt. Um diesen abzufangen benötigt man also ein entsprechendes try{} catch().

Zu 2. Nachdem der Treiber geladen ist und beim Driver-Manager registriert ist, gilt es eine Verbindung zur Datenbank aufzubauen. Dazu benötigt man die Methode getConnection() der

DriverManager-Klasse:

String url =

"jdbc:openlink://localhost/plz/DSN=dsn_oracle";

Connection con =

DriverManager.getConnection(url, argv[0], argv[1]);

Als Parameter muß der Methode üblicherweise ein Nutzername und ein Passwort übergeben werden, die den Zugriff auf die Datenbank legitimieren. Ausserdem muß ein String (JDBC-URL) übergeben werden.

Der Rückgabewert ist ein Objekt der Schnittstelle con - darüber werden die Datenbank-Anfragen und deren Ergebnisse abgewickelt. (DSN = Data Source Name --> Datenquelle mit Zugriffsparametern)

(14)

7. Struktur einer JDBC-Anwendung

Zu 3. Über die nunmehr geöffnete DB-Verbindung sendet der Client SQL-Anweisungen an das DBMS.

Dazu erzeugt er ein Statement-Objekt, schreibt den SQL-Befehl hinein und übermittelt ihn mit Hilfe des JDBC-Treibers und der Statement-Methode executeQuery() an das DBMS.

h

Statement stmt = con.createStatement();

String query = "SELECT ... FROM ... WHERE ... = ... AND ... = ... ";

ResultSet rs = stmt.executeQuery(query);

h

Zu 4. Das Ergebnis einer SELECT-Anweisung ist eine Tabelle. Der JDBC-Treiber stellt sie als Instanz der Klasse ResultSet zur Verfügung. Diese Klasse besitzt Methoden zum Durchlaufen der Tabelle und zum Zugriff auf die Ergebnisse. Die Anwendung bearbeitet das ResultSet zeilenweise von vorn nach hinten.

Um dynamisch Spaltennamen und -anzahl zu ermitteln sind nachfolgende Zeilen zu schreiben:

ResultSetMetaData rsmd = rs.getMetaData();

int columns = rsmd.getColumnCount();

. . .

(15)

7. Struktur einer JDBC-Anwendung

Zu 5. Es ist ein guter Programmierstil, die zuvor geöffneten Objekte zu schließen.

Die Ressourcenfreigabe ist es, die ein vorzeitiges, explizites Schließen von JDBC-Objekten sinnvoll machen kann. Wer mit großen Datenmengen hantiert, sollte ResultSet und Statement

möglichst frühzeitig schließen, damit die nicht mehr benötigten Objekte und Daten nicht unnötig Speicherplatz blockieren.

Es ist natürlich nicht sinnvoll, Connections andauernd zu schließen und wieder zu öffnen, denn der Aufbau der Datenbankverbindung ist recht zeitintensiv.

rs.close();

stmt.close();

con.close();

(16)

8. Servlets und JDBC

Um per Java auf Datenbanken zuzugreifen, kann man sich mehrerer Möglichkeiten bedienen.

Zum einen über ein Java-Applet, welches im Browser auf der Client-Seite abläuft. Weiterhin ist auch eine Java-Applikation denkbar, welche ebenfalls

clientseitig abläuft. Diese beiden Varianten werden als "grafischer JDBC-Client"

bezeichnet.

Dann gibt es noch "verteilte Anwendungen", wo allein die grafische Benutzer- oberfläche (Java-Oberfläche) beim Client bleibt. Die Java-Anwendung läuft auf einem Anwendungsserver. Client und Server kommunizieren über RMI (Remote Method Invocation).

Als Drittes gibt es noch die Java-Servlets, die ebenfalls auf der Serverseite ab- laufen und lediglich HTML an den Client zurückliefern. Hier ist keine JVM auf der Client-Seite notwendig. Allerdings muß der Webserver eine Servletunterstützung haben.

(17)

8. Servlets und JDBC

DBMS A JDBC Anwendungs-

Server Java- Oberfläche

Netz

RMI JDBC

Java- Anwendung

Netz

DBMS A DBMS A

Java-Servlet WWW-Server

HTML- Oberfläche

HTTP

JDBC

Netz

Abb.: Grafischer JDBC-Client Abb.: Verteilte Anwendung Abb.: Web-Datenbank mit HTML-Oberfläche

(18)

8. Servlets und JDBC

Ein Servlet besitzt zwei Vorteile:

1. Es ist in Java geschrieben und daher unabhängig von der Server-Plattform.

Es kann per JDBC auf Datenbanken zugreifen.

2. Das Servlet besitzt eine standardisierte Schnittstelle und ist damit unabhängig vom Web-Server

Der Server muß das Servlet-API unterstützen. (z.B. Jeeves von Sun, Jigsaw von W3C oder Apache mit Aufsatz AnyJ)

Warum Servlets und nicht CGI?

Zum einen wegen der Plattformunabhängigkeit und zum anderen wegen der besseren Performance.

Der Nachteil von CGI-Skripts besteht in ihrer Ineffizienz. Der WWW-Server muß für jeden einzelnen CGI-Aufruf einen neuen Prozeß starten. Bei geringer Last

funktioniert das recht gut, bei hohen Zugriffszahlen geht das System jedoch in die Knie und es kommt zu inakzeptablen Antwortzeiten oder zu Totalausfall.

(19)

9. Beispiele

import java.sql.*;

/* Ein erstes JDBC-Beispiel */

class Simple {

public static void main(String argv[])

throws java.lang.ClassNotFoundException, //eigentlich mit try Exceptions abfangen, hier nur

java.sql.SQLException //nach oben durchgereicht und beenden

{

// JDBC-Treiber laden:

Class.forName("openlink.jdbc.Driver");

// Datenbankverbindung aufbauen:

String url =

"jdbc:openlink://localhost/DSN=dsn_postgres/DATABASE=plz";

Connection con =

DriverManager.getConnection(url, argv[0], argv[1]);

// Statement erzeugen:

Statement stmt = con.createStatement();

// Abfrage ausführen:

String query = "SELECT ge_name, ge_plz_ge, ort_oname" + " FROM gross_da, ort_da" +

" WHERE ge_alort_ge = ort_alort" + " AND ort_oname = 'Dortmund'" +

(20)

9. Beispiele

ResultSet rs = stmt.executeQuery(query);

// Ergebnisse als HTML-Tabelle ausgeben:

System.out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN//\">");

System.out.println("<TITLE>SQL-Abfrage mit JDBC</TITLE>");

System.out.println("<H1>SQL-Abfrage mit JDBC</H1>");

System.out.println("<H2>Abfrage:</H2>");

System.out.println("<P>" + query + "</P>");

System.out.println("<H2>Ergebnistabelle:</H2>");

System.out.println("<TABLE BORDER='1'>");

ResultSetMetaData rsmd = rs.getMetaData();

int columns = rsmd.getColumnCount(); //Spaltennamen aus Metadaten ermitteln // Erste Tabellenzeile enthält die Spaltennamen:

System.out.println("<TR>");

for (int i = 1; i <= columns; i++)

System.out.println(" <TH>" + rsmd.getColumnName(i) + "</TH>");

System.out.println("</TR>");

(21)

9. Beispiele

// Ergebniszeilen ausgeben:

while (rs.next()) {

System.out.println("<TR>"); // neue Tabellenzeile for (int i = 1; i <= columns; i++)

System.out.print(" <TD>" + rs.getObject(i) + "</TD>");

System.out.println("</TR>"); // Tabellenzeile schließen }

System.out.println("</TABLE>"); // Tabelle schließen rs.close(); // ResultSet schließen

// Statement-Objekt schließen:

stmt.close();

// Datenbankverbindung schließen:

con.close();

} }

(22)

9. Beispiele

import java.io.*;

/* Ein erstes Servlet-Beispiel (im JSDK von Sun enthalten)*/

import javax.servlet.*;

import javax.servlet.http.*;

public class HelloWorldServlet extends HttpServlet {

public void doGet (HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException

{

res.setContentType("text/html");

ServletOutputStream out = res.getOutputStream();

out.println("<HTML>");

out.println("<TITLE>Hello World</TITLE>");

out.println("<BODY>");

out.println("<H1>Hello World</H1>");

out.println("</BODY></HTML>");

}

public String getServletInfo() {

return "Create a Page that says " +

"<I>Hello World</I> and send it back";

(23)

Literaturangaben

1 http://java.sun.com Sun Microsystems 2 http://java.seite.net

3 http://www.openlink.de OpenLink Middleware 4 Rainer Klute: Einführung in JDBC Addison Wesley

5 Roßbach,Schreiber:

Java Server und Servlets Addison Wesley

Referenzen

ÄHNLICHE DOKUMENTE

externes Schema = Städteverbindungen Osnabrück internes Schema = Abbildung auf

Java Database Connectivity (Idee, Drivertypen, Grundaufbau) Ablauf der Datenkommunikation über JDBC. Dynamische SQL-Anfragen über JDBC Vergleich PL/SQL, SQLJ

Hochschule für Technik, Wirtschaft und Kultur Leipzig Leipzig University of Applied Sciences..

– Wickelt parallele Transaktionen so ab, daß alle Transaktionen sich verhalten, als seien sie sequentiell bearbeitet worden – Aktiviert Recovery-Manager im Fall eines System-

– Zugriff des Applets auf die DB über JDBC oder SQLJ. – WWW-Server realisiert nur noch das Übertragen

➥ JDBC erlaubt portablen Zugriff auf relationale Datenbanken. ➥ Abfragen

➥ JDBC erlaubt portablen Zugriff auf relationale Datenbanken. ➥ Abfragen

Wie für die Applikation IngestList gilt auch für SIARD, dass die Anwendung über eine JDBC-Verbindung auf die Datenbanken der Fachanwendungen „socialWEB“ und „ESCADA 2