Java und Datenbanken JDBC Konzepte Realisierung von Zugriffen Autor: Mathias Lother Status: Entwurf OTTO-VON-GUERICKE-UNIVERSITÄT MAGDEBURG FAKULTÄT FÜR INFORMATIK Seite 1 Montag, 16. Mai 2016 Java und Datenbanken - Gliederung Einführung in JDBC JDBC-Architektur Autor: Mathias Lother Status: Entwurf 2-Schichten-Modell vs. 3-Schichten-Modell JDBC und ODBC JDBC Treiber und -typen Package SQL Manipulation von Tabellen JDBC-Erweiterungen Zusammenfassung OTTO-VON-GUERICKE-UNIVERSITÄT MAGDEBURG FAKULTÄT FÜR INFORMATIK Seite 2 Montag, 16. Mai 2016 Java und Datenbanken - Einführung in JDBC Java Database Connectivity Interface (JDBC) ist Handelsmarke der Firma Sun Microsystems ist vollständig in Java implementiert stellt API zur Verfügung, um SQL-Datenbankabfragen zu realisieren fordert hierbei KEINE Voraussetzungen an die benutzte Datenbank, d.h. Java-Applikationen können unabhängig von der verwendeten Datenbank erstellt werden Informix Anwendung DB2 JDBC-API Sybase Autor: Mathias Lother Status: Entwurf OTTO-VON-GUERICKE-UNIVERSITÄT MAGDEBURG FAKULTÄT FÜR INFORMATIK Seite 3 Montag, 16. Mai 2016 Java und Datenbanken - Gliederung Einführung in JDBC JDBC-Architektur Autor: Mathias Lother Status: Entwurf 2-Schichten-Modell vs. 3-Schichten-Modell JDBC und ODBC JDBC Treiber und -typen Package SQL Manipulation von Tabellen JDBC-Erweiterungen Zusammenfassung OTTO-VON-GUERICKE-UNIVERSITÄT MAGDEBURG FAKULTÄT FÜR INFORMATIK Seite 4 Montag, 16. Mai 2016 Java und Datenbanken - JDBC-Architektur Zwei-Schichten-Modell vs. Drei-Schichten-Modell Java-Anwendung Java-Anwendung Socket, RMI, CORBA, etc. Client JDBC-Treiber Anwendungsserver Servermaschine DBMS-spezifisches Protokoll JDBC-Treiber DBMS-spezifisches Protokoll DBMS Datenbank-Server DBMS Client-Server-Architektur Treiber wird über das Netz geladen Treiber muss netzwerkfähig sein Web- & DB-Server auf gleicher Maschine hohe Rechenleistung erforderlich Autor: Mathias Lother Status: Entwurf Client Datenbankserver Zusätzliche Schicht als Komponentenadapter Treiber lokal bei Server Treiber muss NICHT netzwerkfähig sein Mittlere Schicht ermöglicht Kontrolle von DB-Zugriffen stellt DB-Operationen für komfortable Nutzung im API zur Verfügung OTTO-VON-GUERICKE-UNIVERSITÄT MAGDEBURG FAKULTÄT FÜR INFORMATIK Seite 5 Montag, 16. Mai 2016 Java und Datenbanken - JDBC-Architektur JDBC und ODBC Open Database Connectivity (ODBC) ist ein weit verbreitetes und akzeptiertes API zum Zugriff auf relationale DB (RDBMS) Erstellung von Anwendungen, die ODBC nutzen, ist an keine Programmiersprache gebunden Funktionen des ODBC-API werden durch Treiber bereitgestellt Aufruf dieser Treiberfunktionen unabhängig von verwendeter DB ODBC-API wurde von MS in C entwickelt, Autor: Mathias Lother Status: Entwurf d.h.ODBC-API bietet selbst KEINE geeignete Schnittstelle zw. Java und Datenbanken ABER: im JDBC-Paket ist eine ODBC-JDBC-Brücke (ein spezieller Treiber) enthalten Sowohl JDBC als auch ODBC verwenden SQL OTTO-VON-GUERICKE-UNIVERSITÄT MAGDEBURG FAKULTÄT FÜR INFORMATIK Seite 6 Montag, 16. Mai 2016 Java und Datenbanken - JDBC-Architektur JDBC-Treiber die eigentliche Funktionalität der JDBC liegt im vorhandenen JDBC-Treiber JDBC-Treiber wird über den JDBC-Treiber-Manager verwaltet Kernstück hierbei ist das Interface java.sql.Driver, das auch auf java.sql.Connection (Verbindungsaufbau), java.sql.Statement (SQL-Anfrage) und java.sql.ResultSet (Ergebnisse) zugreift es gibt 4 Treibertypen: Autor: Mathias Lother Status: Entwurf Typ-1 und Typ-2 sind NICHT netzwerkfähig Typ-3 und Typ-4 verwenden Netzwerkprotokoll OTTO-VON-GUERICKE-UNIVERSITÄT MAGDEBURG FAKULTÄT FÜR INFORMATIK Seite 7 Montag, 16. Mai 2016 Java und Datenbanken - JDBC-Architektur Java- Anwendung JDBC-Treiber Typ-1 JDBC-ODBC-Bridge nativer ODBC-Treiber lokal beim Client installiert lediglich lokale Datenquellen können angesprochen werden JDBC-Treiber-Manager JDBC-ODBC-Bridge-Treiber Native Interface (DLL) ODBC-Treiber-Manager ODBC-Treiber Datenbankbibliothek DBMS Autor: Mathias Lother Status: Entwurf OTTO-VON-GUERICKE-UNIVERSITÄT MAGDEBURG FAKULTÄT FÜR INFORMATIK Seite 8 Montag, 16. Mai 2016 Java und Datenbanken - JDBC-Architektur Java- Anwendung JDBC-Treiber Typ-2 Native API Partly Java Driver Treiber muss lokal beim Client installiert werden, was i.d.R. durch vorab geladene Treiber sichergestellt wird der im Typ-1 in nativem Code implementierte ODBC-Treiber wird durch einen herstellerabhängigen Treiber (Informix, DB2) ersetzt JDBC-Treiber-Manager Native Java-Treiber Native Interface (DLL) Datenbankbibliothek DBMS Autor: Mathias Lother Status: Entwurf OTTO-VON-GUERICKE-UNIVERSITÄT MAGDEBURG FAKULTÄT FÜR INFORMATIK Seite 9 Montag, 16. Mai 2016 Java und Datenbanken - JDBC-Architektur Java- Anwendung JDBC-Treiber-Manager JDBC-Treiber Typ-3 JDBC Net Pure Java Driver Anfragen werden in DB-unabh. Netzwerkprotokoll übersetzt keinerlei Installationen beim Client notwendig universelle Treiber vom Server ladbar tatsächliche Treiber wird auf Server ausgeführt Java-Treiber Middleware ODBC-Treiber-Manager ODBC-Treiber Datenbankbibliothek DBMS Autor: Mathias Lother Status: Entwurf OTTO-VON-GUERICKE-UNIVERSITÄT MAGDEBURG FAKULTÄT FÜR INFORMATIK Seite 10 Montag, 16. Mai 2016 Java und Datenbanken - JDBC-Architektur JDBC-Treiber Typ-4 Native Protokoll Pure Java Driver Verwendung nur von Java-Treibern Treibertyp muss vom DB-Hersteller entwickelt werden (Kosten!) portabelste und effektivste Lösung Wahrung der Plattformunabhängigkeit Java- Anwendung JDBC-Treiber-Manager Java-Treiber Datenbankbibliothek DBMS Autor: Mathias Lother Status: Entwurf OTTO-VON-GUERICKE-UNIVERSITÄT MAGDEBURG FAKULTÄT FÜR INFORMATIK Seite 11 Montag, 16. Mai 2016 Java und Datenbanken - JDBC-Architektur Betrachtungen zu den JDBC-Treibern Treibertypen 3 und 4 sind eher zu empfehlen als Typen 1 und 2, da hierbei der Datenbankzugriff über das Internet möglich wird sind jedoch nicht für alle Datenbanken erhältlich Treibertyp 1 ist am leichtesten zu realisieren, da Java die JDBCODBC-Bridge direkt anbietet Verfügbarkeiten: Firma IBM Imaginary Intersolv Konasoft Inc. Autor: Mathias Lother Status: Entwurf Treibertyp DBMS 2, 3 IBM DB-2 Universal Version 5.2 IBM DB-2 Connect Version 5.2 4 MSQL (Freeware) 3 DB-2, Ingres, Informix, Oracle MS SQL-Server 3 Oracle, MS SQL-Server, Sybase OTTO-VON-GUERICKE-UNIVERSITÄT MAGDEBURG FAKULTÄT FÜR INFORMATIK Seite 12 Montag, 16. Mai 2016 Java und Datenbanken - Gliederung Einführung in JDBC JDBC-Architektur Autor: Mathias Lother Status: Entwurf 2-Schichten-Modell vs. 3-Schichten-Modell JDBC und ODBC JDBC Treiber und -typen Package SQL Manipulation von Tabellen JDBC-Erweiterungen Zusammenfassung OTTO-VON-GUERICKE-UNIVERSITÄT MAGDEBURG FAKULTÄT FÜR INFORMATIK Seite 13 Montag, 16. Mai 2016 Java und Datenbanken - Package SQL Package java.sql realisiert die eigentliche JDBC-Funktionalität in Java ist standardmäßig Teil der Java-Bibliothek 16 Interfaces: 6 allgemeine Klassen: Array, Blob, CallableStatement, Clob, Connection, DatabaseMetaData, Driver, PreparedStatement, Ref, ResultSet, ResultSetMetaData, SQLData, SQLInput, SQLOutput, Statement, Struct Date, DriverManager, DriverPropertyInfo, Time, Timestamp, Types 4 Exceptions Autor: Mathias Lother Status: Entwurf BatchUpdateException, DataTruncation, SQLException, SQLWarning OTTO-VON-GUERICKE-UNIVERSITÄT MAGDEBURG FAKULTÄT FÜR INFORMATIK Seite 14 Montag, 16. Mai 2016 Java und Datenbanken - Package SQL SQL und Java-Datentypen nicht alle in SQL definierten Datentypen werden von beliebigen Datenbanksystemen unterstützt (tw. Unterschiede in Bezeichnung) JDBC stellt Datentypen zur Verfügung, um einen einheitlichen Datenzugriff zu gewährleisten Methoden setxxx(), getxxx() und registerOutParameter() ermöglichen Konvertierung von JDBC- zu Java-Datentypen Konvertierung & Abbildung, Beispiele: Autor: Mathias Lother Status: Entwurf BIG INT (SQL-Datentyp) float (Java-Datentyp) CHAR (JDBC-Datentyp) getLong() (Java-Methode) REAL (JDBC-Datentyp) String (Java-Datentyp) OTTO-VON-GUERICKE-UNIVERSITÄT MAGDEBURG FAKULTÄT FÜR INFORMATIK Seite 15 Montag, 16. Mai 2016 Java und Datenbanken - Gliederung Einführung in JDBC JDBC-Architektur Autor: Mathias Lother Status: Entwurf 2-Schichten-Modell vs. 3-Schichten-Modell JDBC und ODBC JDBC Treiber und -typen Package SQL Manipulation von Tabellen JDBC-Erweiterungen Zusammenfassung OTTO-VON-GUERICKE-UNIVERSITÄT MAGDEBURG FAKULTÄT FÜR INFORMATIK Seite 16 Montag, 16. Mai 2016 Java und Datenbanken - Tabellenmanipulation JDBC-API Programmierer kann mit Hilfe des APIs Objekte und Methoden definieren, um Datenbankzugriffe zu realisieren Zugriff auch als Stapeloperation (Batch) möglich Art und Weise des DB-Zugriffs Autor: Mathias Lother Status: Entwurf Laden eines geeigneten JDBC-Treibers Herstellung der Datenbankanbindung Erstellung eines Statementobjekts und Weitergabe der auszuführenden Anweisungen über das Anweisungsobjekt an das darunter liegende DBMS Rückgabe der Funktionen in Form von Ergebnisdatensätzen Schließen der Verbindung zur Datenbank OTTO-VON-GUERICKE-UNIVERSITÄT MAGDEBURG FAKULTÄT FÜR INFORMATIK Seite 17 Montag, 16. Mai 2016 Java und Datenbanken - Tabellenmanipulation Laden eines JDBC-Treibers Verbindung zu Datenbanken Code: class.forName(“meinTreiber“) Instanz des Treibers wird dynamisch erzeugt und automatisch beim Treibermanager-Objekt registriert Code: Connectino mein_con = DriverManager.getConnection(db_url, userID, passwd); Generierung und Ausführung von Statements Statementobjekt wird benötigt Code: Statement mein_stmt = mein_con.createStatement(); Anfragen durch die Methoden executeQuery(), executeUpdate(), executeBatch(), execute() Autor: Mathias Lother Status: Entwurf Code: Resultset mein_result = mein_stmt.executeQuery(“Select * FROM Spieler”) OTTO-VON-GUERICKE-UNIVERSITÄT MAGDEBURG FAKULTÄT FÜR INFORMATIK Seite 18 Montag, 16. Mai 2016 Java und Datenbanken - Tabellenmanipulation Rückgabe von Ergebnissen Code: SELECT Gespielt, Nachname FROM Spieler String name = mein_result.getString(“Name”) int anzahlSpiele = mein_result.getInt(“Gespielt”) ResultSet.next Schließen einer Verbindung Code: mein_con.close() Autor: Mathias Lother Status: Entwurf OTTO-VON-GUERICKE-UNIVERSITÄT MAGDEBURG FAKULTÄT FÜR INFORMATIK Seite 19 Montag, 16. Mai 2016 Java und Datenbanken - Gliederung Einführung in JDBC JDBC-Architektur Autor: Mathias Lother Status: Entwurf 2-Schichten-Modell vs. 3-Schichten-Modell JDBC und ODBC JDBC Treiber und -typen Package SQL Manipulation von Tabellen JDBC-Erweiterungen Zusammenfassung OTTO-VON-GUERICKE-UNIVERSITÄT MAGDEBURG FAKULTÄT FÜR INFORMATIK Seite 20 Montag, 16. Mai 2016 Java und Datenbanken - JDBC-Erweiterungen Java Naming and Directory Interface (JNDI) explizite Angabe eines Treibers und einer URL zur Anbindung an DBMS schafft Abhängigkeiten, diese sollten vermieden werden JNDI legt logische Namen für DBs und Treiber fest Anwendung erhält ein DataSource-Ojekt mit Hilfe von JNDI können DataSource-Objekte ausgetauscht werden, ohne dass der Code verändert werden muss Autor: Mathias Lother Status: Entwurf OTTO-VON-GUERICKE-UNIVERSITÄT MAGDEBURG FAKULTÄT FÜR INFORMATIK Seite 21 Montag, 16. Mai 2016 Java und Datenbanken - JDBC-Erweiterungen Connection Pooling (Verbindungszusammenschluss) ist Teil von javax.sql Verwaltung der physikalischen Verbindungen zum DBMS im Cache Bei Anforderung einer Verbindung zum DBMS durch Java wird im Cache nach einem PooledConnection-Objekt gesucht, ist keins vorhanden, wird dieses erzeugt Erzeugung des Objektes ist für Java transparent JNDI übergibt JDBC-Implementation (mit Connection Pooling) Autor: Mathias Lother Status: Entwurf OTTO-VON-GUERICKE-UNIVERSITÄT MAGDEBURG FAKULTÄT FÜR INFORMATIK Seite 22 Montag, 16. Mai 2016 Java und Datenbanken - JDBC-Erweiterungen Distributed Transaction Support (Unterstützung verteilter Transaktionen) Transaktion = Bündelung von mehreren Datenbank-Operationen JDBC kann so das standardmäßige Two-Phase-Commit- Protokoll nutzen Vereinfachung Autor: Mathias Lother Status: Entwurf des Einsatzes von JDBC im Zusammenhang mit Enterprise-JavaBeans des Transaktions--Managements in verteilten Systemen OTTO-VON-GUERICKE-UNIVERSITÄT MAGDEBURG FAKULTÄT FÜR INFORMATIK Seite 23 Montag, 16. Mai 2016 Java und Datenbanken - Gliederung Einführung in JDBC JDBC-Architektur Autor: Mathias Lother Status: Entwurf 2-Schichten-Modell vs. 3-Schichten-Modell JDBC und ODBC JDBC Treiber und -typen Package SQL Manipulation von Tabellen JDBC-Erweiterungen Zusammenfassung OTTO-VON-GUERICKE-UNIVERSITÄT MAGDEBURG FAKULTÄT FÜR INFORMATIK Seite 24 Montag, 16. Mai 2016 Java und Datenbanken - Zusammenfassung JDBC ist standardisiertes Interface, das auch direkt SQLAnweisungen ausführen kann Vorteile von JDBC Plattformunabhängigkeit Einfache Portierbarkeit Einfache Programmierbarkeit Erweiterbarkeit Nachteile von JDBC schlechte Leistung der Datenbankzugriffe Autor: Mathias Lother Status: Entwurf OTTO-VON-GUERICKE-UNIVERSITÄT MAGDEBURG FAKULTÄT FÜR INFORMATIK Seite 25 Montag, 16. Mai 2016