1 / 24

JDBC – Datenzugriff aus Java

JDBC – Datenzugriff aus Java. ETIS SS04. Gliederung. Motivation Bestandteile Fehlerbehandlung Metadaten Zusammenfassung. Motivation(I). Standard für Zugriff auf Datenquellen aus Java-Anwendungen RDBs, Flat Files, Spread Sheets Bestandteil Java-Standarddistribution seit JDK 1.1

cais
Download Presentation

JDBC – Datenzugriff aus Java

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. JDBC – Datenzugriff aus Java ETIS SS04

  2. Gliederung • Motivation • Bestandteile • Fehlerbehandlung • Metadaten • Zusammenfassung JDBC

  3. Motivation(I) • Standard für Zugriff auf Datenquellen aus Java-Anwendungen • RDBs, Flat Files, Spread Sheets • Bestandteil Java-Standarddistribution seit JDK 1.1 • aktuell: Version 3.0 • JDBC keine Abkürzung • inoffiziell: Java Database Connectivity • einfacher Zugriff aus Java auf Datenquellen • plattform- und datenbankunabhängig • “write once run anywhere“ JDBC

  4. Motivation (II) • unterschiedliche DBS besitzen unterschiedliche Programmierschnittstellen • somit: • schwer, DBMS-unabhängige Anwendungen zu entwickeln • Probleme bei Portierung auf andere DBMS • deshalb: • JDBC entwickelt • somit: • selber Quellcode für Kommunikation mit beliebiger DB • (Voraussetzung: JDBC-Treiber und ANSI SQL-2 Fähigkeit der DB) JDBC

  5. Bestandteile (I) • Klassen und Schnittstellen des package java.sql bzw. javax.sql • DriverManager • Einstiegspunkt, • hält Liste registrierter Treiberklassen • versucht Treiber zu lokalisieren + DB-Verbindung aufzubauen • DataSource • repräsentiert Datenquelle in Java • Alternative zum DriverManager • arbeitet mit JNDI (Features wie Connection Pooling, verteilte Transaktionen + Wartbarkeit verbessert) JDBC

  6. Bestandteile(II) • Connection • repräsentiert Verbindung zu Datenquelle • beinhaltet auszuführende SQL-Statements + zurückgegebene Ergebnisse • eine Anwendung kann eine oder mehrere Verbindungen zu einer oder mehreren Datenquellen haben JDBC

  7. Bestandteile(II) • Statement • ermöglicht Ausführung von SQL-Anweisungen über gegebene Verbindung • ResultSet • verwaltet Ergebnisse einer Anfrage • unterstützt Zugriff auf einzelne Spalten JDBC

  8. Treibermanager • führt Liste mit allen geladenen Treibern • alle Verbindungen vom Programm zur Datenbank laufen über ihn • Treiber aufgrund Verbindungsinformationen gewählt • registrierte Treiber entsprechend ihrer Reihenfolge getestet • erster passender ausgewählt • Treiberkonzept bewirkt Flexibilität von JDBC JDBC

  9. Treiber • Treiber Schnittstelle zwischen JDBC und DB • Austausch Treiber ermöglicht Zugriff auf andere DB mit selben Quellen • d.h. jedes DBMS benötigt eigenen Treiber • explizites Laden im Programm: • Class.forName(„jdbc.odbc.JdbcOdbcDriver“); • Java-Classloader lokalisiert Treiber und lädt und linkt ihn automatisch • danach registriert sich Treiber selbständig beim Treibermanager JDBC

  10. Connection (I) • repräsentiert Verbindung zur Datenbank • Verbindungsaufbau: • Connection con = DriverManager.getConnection( • String url, String name, String passwort); • Url: jdbc:<subprotocol>:<subname> • Ablauf JDBC-DB-Anwendung: • Verbindungsaufbau zur DB • SQL-Anweisung senden • Anfrageergebnisse verarbeiten JDBC

  11. Connection (II) • Connection Pooling (seit 2.0) • da Connectionaufbau teure Operation • Reduzierung Verbindungsauf- und -abbau • wenn DB-Verbindung geschlossen, nicht beendet, sondern markiert • will andere Anwendung Verbindung öffnen, Prüfung, ob passende Verbindung in Pool - nur wenn nein, neue aufgebaut JDBC

  12. Statement + ResultSet • Statement stmt = connection.createStatement(); • ResultSet rs = stmt.executeQuery(“select...”); • while(rs.next()){ • System.out.println(rs.getString(“name”)); • } • rs.close(); • stmt.close(); JDBC

  13. Statement (I) • Drei Arten für Ausführung von SQL (Interfaces bauen aufeinander auf): • Statement: einfacher SQL-Befehl • PreparedStatement: vorkompilierter SQL-Befehl • CallableStatement: Aufruf einer Prozedur • Methoden für Abfragen von Ergebnissen: • createQuery (Anfragen) • createUpdate (Einfügen, Ändern, Löschen sowie DDL-Anweisungen) • seit 2.0: BatchUpdates (Ausführung mehrerer Updates als “Stapel“ - Performancegewinn) JDBC

  14. Statement (II) • Methoden für Ausführen von Statements: • executeQuery (Anfragen) • executeUpdate (Änderungsoperation + DDL-Befehle) • execute (mehr als ein ResultSet oder update count zurückgegeben) • Escape Syntax ermöglicht mehr DB-Unabhängigkeit • Connections, Statements, ResultSets immer explizit schliessen, um Ressourcen so früh wie möglich frei zu geben JDBC

  15. PreparedStatement(I) • PreparedStatement pstmt = con.prepareStatement( • “select * from person where name = ? and • vorname = ?”); • pstmt.setString(1, “Lustig”); • pstmt.setString(2, “Peter”); • ResultSet rs = rs.executeQuery(); JDBC

  16. PreparedStatement (II) • Zeichenkette mit SQL-Anweisung bei Erzeugung des Objektes zu DBMS gesendet, dort kompiliert und zur Ausführung vorbereitet • Parameter unbekannt, wenn Statement kreiert • ? Platzhalter für Parameter • für endgültige Ausführung: IN-Parameter übergeben • Parameter gültig bis Aufruf clearParameter oder neu gesetzt • Laufzeitvorteile, wenn Anweisung mehrfach mit verschiedenen Parametern ausgeführt JDBC

  17. ResultSet (I) • Java-Objekt, das Ergebnisse einer Anfrage enthält • Anfrageergebnisse haben Tabellenform (besitzen Zeilen und Spalten) • Ergebnisse durch getter abfragbar • ResultSet hat Cursor • steht zunächst vor 1. Tupel • gültig bis ResultSet oder Statement geschlossen • mit next() vorwärts • seit 2.0: Scrollbare ResultSets (vor-, rückwärts durchlaufen + zu bestimmter Stelle springen) JDBC

  18. ResultSet (II) • weitere Neuerungen 2.0 • Datenänderungen noch nach Öffnen des ResultSets aktualisiert • änderbare ResultSets, d.h. Tupel der Ergebnismenge in ResultSet und Datenbank änderbar • SQL99-Datentypen (benutzerdefinierte Typen, BLOB, ARRAY...) JDBC

  19. Fehlerbehandlung • Problem: DBMS nutzen z.T. alten oder propritären SQL-Syntax • Lösung: JDBC kontrolliert nicht, ob Anfrage richtig, • Nutzer kann jegliche DBMS-Funktionalität nutzen • wenn Anfrage falsch von DB Fehler erzeugt • auch Fehler bei Verbindungsproblemen, DBMS- oder Hardwarefehlern • Fehler als Exceptions signalisiert – mit try und catch abfangen • Exception bedeutet nicht unbedingt, dass Methode nicht ausgeführt  besser explizit zurücksetzen JDBC

  20. Metadaten • DBMS haben unterschiedliche Feature, Datentypen • Metadaten informieren über die Datenbank • DB-Schema, SQL-Dialekt, implementierte Operationen • java.sql.DatabaseMetaData: • Informationen zur Struktur DB oder DBMS • dmd.getURL(); • Anfrage zur Laufzeit vom Nutzer eingegeben, Informationen über ResultSet nötig • Schnittstelle java.sql.ResultSetMetaData: • Informationen zur Struktur des ResultSet • rs.getColumnCount(); JDBC

  21. Zusammenfassung • Standard für DB-Zugriff aus Java • plattform- und datenbankunabhängig • grundlegende Feature einfach, schnell erlernbar • vor 3.0 hauptsächlich grundlegende Möglichkeiten zum Zugriff von Javaprogrammen auf Datenbanken • ab 3.0 DB-Zugriff aus Application Server Schicht (Connection-Pooling-Konfiguration) • viele neue Eigenschaften (ab 2.0) optional und müssen nicht von JDBC-Treibern unterstützt werden • alte Treiber weiter nutzbar JDBC

  22. Literatur • Saake, G., Sattler, K.: Datenbanken & Java: JDBC, SQLJ und ODMG dpunkt.verlag, Heidelberg, Mai 2000. • http://java.sun.com/products/jdbc/ • http://java.seite.net/jdbc/treiber.html • http://java.sun.com/j2se/1.4.2/docs/guide/jdbc/getstart/GettingStartedTOC.fm.html • Jansen, R.: Tuning-Center, Java Magazin,7/2003, S.80: Neuerungen aus JDBC 3.0 am Beispiel der Oracle-Datenbank JDBC

  23. Transaktionen • i.d.R. Verbindungen im autocommit-Modus gestartet (einzelnes Statement sofortige Auswirkung auf Datenbank) • mehrere Operationen zusammenfassen: • connection.setAutocommit(false); • so: Änderungen zu beliebigen Zeitpunkt dauerhaft in DB geschrieben (commit()) oder • Änderungen aktueller Transaktion rückgängig gemacht (rollback()) JDBC

  24. Neuerungen in JDBC 3.0 • im Vordergrund DB-Zugriff aus Application Server Schicht • Connection-Pooling-Konfiguration • Savepoints • Wiederverwendung von Prepared Statements • Zugriff auf automatisch generierte Schlüssel • Zugriff auf Metainformtionen von Statement-Parametern • Verbesserungen bei Result-Sets JDBC

More Related