Datenbankanwendungen (JDBC)



Ähnliche Dokumente
Java Database Connectivity (JDBC) Walther Rathenau Gewerbeschule 1

Wie kommen die Befehle zum DBMS

Datenbanksysteme. Programmieren von Datenbankzugriffen mit JDBC. Burkhardt Renz. Fachbereich MNI Technische Hochschule Mittelhessen

seit Java 1.1 Bestandteil der API: packages java.sql, javax.sql

Tag 4 Inhaltsverzeichnis

Oracle: Abstrakte Datentypen:

Datenbank und Informationssysteme

3. Stored Procedures und PL/SQL

Universität Stuttgart Abteilung Anwendersoftware Steht für Embedded SQL in Java. - Java-Methoden als SQL Stored-Procedures

Tag 4 Inhaltsverzeichnis

Willkommen. Datenbanken und Anbindung

Client/Server-Programmierung

JDBC. Es kann z.b. eine ODBC-Treiberverbindung eingerichtet werden, damit das JAVA-Programm auf eine ACCESS-DB zugreifen kann.

Kapitel 10. JDBC und SQLJ. Prof. Dr. Wolfgang Weber Vorlesung Datenbanken 1

Wie kommen die Befehle zum DBMS

Transaktionen in der Praxis. Dr. Karsten Tolle

Datenbanken Konsistenz und Mehrnutzerbetrieb III

Datenbanken & Informationssysteme Übungen Teil 1

Grundlagen von Datenbanken SS 2010 Kapitel 8: Datenbank-Einbettung in Programmiersprachen Prof. Dr. Stefan Böttcher Universität Paderborn

Beispiel: DB-Mock (1/7)

Gesicherte Prozeduren

Hochschule Karlsruhe Technik und Wirtschaft

Architekturen. Von der DB basierten zur Multi-Tier Anwendung. DB/CRM (C) J.M.Joller

JDBC Datenzugriff aus Java ETIS SS04

Listener: Bei Oracle erfolgt die Steuerung (konventionell) via listener.ora (Listener Konfiguration), tnsnames.ora (Client Konfiguration)

Java Application 1 Java Application 2. JDBC DriverManager. JDBC-ODBC Br idge. ODBC Driver Manager. Dr iver C. Dr iver D.

Java Database Connectivity-API (JDBC)

Prozedurale Datenbank- Anwendungsprogrammierung

Synchronisation in Datenbanksystemen in a nutshell

Transaktionen und Synchronisation konkurrierender Zugriffe

Datensicherheit und Hochverfügbarkeit

SQLJ. Standardisierte Java-DB. DB-Schnittstelle. Spezifikationen. Oracle, IBM, Informix, Sybase,, Tandem, Sun, Microsoft stehen dahinter

Datenbanksysteme. Programmieren von Datenbankzugriffen mit JDBC. Burkhardt Renz. Fachbereich MNI Technische Hochschule Mittelhessen

Java Database Connectivity-API (JDBC)

php Hier soll ein Überblick über das Erstellen von php Programmen gegeben werden. Inhaltsverzeichnis 1.Überblick Parameterübergabe...

11 Anwendungsprogrammierung

2. Datenbank-Programmierung

6.9 Java Server Pages

EJB Beispiel. JEE Vorlesung 10. Ralf Gitzel

JDBC. Allgemeines ODBC. java.sql. Beispiele

DB-Programmierung. Lehr- und Forschungseinheit Datenbanken und Informationssysteme 1. Ziele. DB2 Zugriff mit Java selbst programmieren

vs. Fehler zur Übersetzungszeit

Isolationsstufen für. Dr. Karsten Tolle Dienstag 31. Januar 2012

Webbasierte Informationssysteme

Betriebshandbuch. MyInTouch Import Tool

Java Database Connectivity-API (JDBC)

Folgendes PL/SQL Codefragment zeigt das grundlegende Statement für diesen Test: Java.

Anleitung Grundsetup C3 Mail & SMS Gateway V

Datenmanagement in Android-Apps. 16. Mai 2013

JDBC. Java DataBase Connectivity

View. Arbeiten mit den Sichten:

Objektorientierte Programmierung

Übung 7 DBMS-FUNKTIONALITÄTEN UND DATENIMPORT

SAP NetWeaver Gateway. 2013

Prozessarchitektur einer Oracle-Instanz

Praktikum Datenbanksysteme

Oracle GridControl Tuning Pack. best Open Systems Day April Unterföhring. Marco Kühn best Systeme GmbH

Session Beans & Servlet Integration. Ralf Gitzel ralf_gitzel@hotmail.de

Datenbankzugriff mit JDBC

1 Transaktionen in SQL. 2 Was ist eine Transaktion. 3 Eigenschaften einer Transaktion. PostgreSQL

Dynamisches SQL. Folien zum Datenbankpraktikum Wintersemester 2009/10 LMU München

Whitepaper. Produkt: combit Relationship Manager. Einbindung externer FiBu-/Warenwirtschaftsdaten. combit GmbH Untere Laube Konstanz

Lehrveranstaltung Grundlagen von Datenbanken

Programmieren für mobile Endgeräte SS 2013/2014. Dozenten: Patrick Förster, Michael Hasseler

Dokumentation zur Anlage eines JDBC Senders

NEWSLETTER // AUGUST 2015

Einführung in die Programmierung

Windows Server 2008 für die RADIUS-Authentisierung einrichten

Anleitung zur Anmeldung mittels VPN

SQL für Trolle. mag.e. Dienstag, Qt-Seminar

Eine Anwendung mit InstantRails 1.7

Von ODBC zu OLE DB. Neue Möglichkeiten der Datenintegration. Harald Gladytz, Team Vertrieb ESRI Niederlassung Leipzig

Um DynDNS zu konfigurieren, muss ausschließlich folgendes Menü konfiguriert werden:

Transaktionsverwaltung

Fakultät für Informatik & Wirtschaftsinformatik DB & IS II SS Transaktionen & ACID. Dr. Christian Senger Transaktionen & ACID 1

Professionelle Seminare im Bereich MS-Office

SQL (Structured Query Language) Schemata Datentypen

ORACLE Business Components for Java (BC4J) Marco Grawunder

Verbinden von IBM Informix mit Openoffice mittels JDBC

Whitepaper. Produkt: combit Relationship Manager 7. combit Relationship Manager -rückläufer Script. combit GmbH Untere Laube Konstanz

DB2 Kurzeinführung (Windows)

Datenbanken: Transaktionskonzept und Concurrency Control

MailUtilities: Remote Deployment - Einführung

Technische Beschreibung: EPOD Server

Verteidigung gegen SQL Injection Attacks

Klausur zur Vorlesung Datenbanksysteme I

Der lokale und verteilte Fall

1 Installation QTrans V2.0 unter Windows NT4

Transkript:

Datenbankanwendungen (JDBC) Hierarchie: Connection Transaction Statement

Connection Aufbau (klassisch): Registrierung des JDBC Driver beim DriverManager: Class.forName(JDBC Driver); Eigentlicher Verbindungsaufbau über DriverManager: Connection conn = Driver Manager get Connection (DB URL, Username, Password); Inhalt der DB URL: (z.b. jdbc:oracle:thin:@itlab34.ba-mannheim.de:1521:test17) JDBC Driver (jdbc:oracle:thin) Rechnername oder IP-Adresse Port, auf dem DB Connections erwartet werden (Oracle Listener: 1521) i.a. Datenbank, für Oracle die SID (Instanz ID) Ende: conn.close();

Connection via DataSource Interface: DataSource wird mittels JNDI (Java Naming and Directory Interface) bekannt gemacht (z.b. in den Deployment Descriptoren eines J2EE Servers) DataSource wird (in der Applikation) über den definierten Namen angesprochen liefert eine Connection Context Ctx = new InitialContext(); DataSource ds = (DataSource) Ctx.lookup( java:/comp/env/jdbc/oracleds ); Connection conn = ds.getconnection(); Vorteile: Transparenz Unterstützung von Connection Pooling Unterstützung verteilter Transaktionen

JDBC Driver Typ Name Client Software Server Software 1 JDBC/ODBC Bridge JDBC Driver, ODBC Driver, DB Client 2 Application Driver JDBC Driver, DB Client 3 Net Driver JDBC Driver JDBC Server DB Client / DBMS 4 Thin Driver JDBC Driver DBMS Tendenz auch bei Tier 3 Architekturen => Typ 4

Fehlerbehandlung Behandlung von SQLExceptions: try { // Datenbankzugriffe catch (SQLException SQLe) { } while (SQLe!= null) { } // Fehlerbehandlung SQLe = SQLe.getNextException(); Zur Auswertung der SQL Exception stehen folgende Methoden zur Verfügung: getsqlstate() (liefert Fehlercode gemäß SQL Standard) geterrorcode() (liefert herstellerspezifischen Fehlercode) SQL Warnings müssen explizit behandelt werden: try { stmt.executeupdate( ); sqlw = stmt.getwarnings(); while( sqlw!= null) { // Behandlung sqlw = sqlw.getnextwarning(); } } catch ( SQLException SQLe) { }

Transaction Steuerung über Connection AutoCommit Modus conn.setautocommit (true/false); AutoCommit true: 1 Transaktion besteht aus 1 Statement (automatisches Commit nach Statement Ende) => echte Transaktionen nur für AutoCommit false Steuerung: conn.commit(); conn.rollback(); Savepoints (Strukturierung von TX) Savepoint savepoint1 = conn.setsavepoint (); conn.rollback(savepoint1);

Isolation Level conn.setisolationlevel ( ); Isolation Level bestimmt Isolation (und damit, welche Sperren gesetzt bzw. beachtet werden) für lesende Zugriffe Schreibende Zugriffe erfordern immer exklusive Sperren bis zum TX Ende (unverträglich mit beliebigen Sperren)! JDBC Isolation Level None read uncommitted read committed repeatable read Serializable Transaktionen werden nicht unterstützt Bereitschaft, nicht bestätigte Daten zu lesen Nur bestätigte Daten werden gelesen Wiederholtes Lesen einer Zeile innerhalb einer TX führt zum gleichen Ergebnis Wiederholtes Ausführen einer Abfrage innerhalb einer TX führt zum gleichen Ergebnis (keine Phantom Inserts!) Es gibt DBS, die nicht alle Isolation Level implementieren (z.b. Oracle) Die Implementierung der Isolation Level ist von DBS zu DBS unterschiedlich!

Statement Hierarchie: Statement PreparedStatement CallableStatement (hier nicht behandelt)

Statement Interface Erzeugen Statement stmt = conn.createstatement(); Ausführen Falls keine Ergebnismenge geliefert wird int rowcount = stmt.executeupdate( update ); Falls eine Ergebnismenge (ResultSet) geliefert wird (select) ResultSet rs = stmt.executequery("select. ); Generell boolean hasresultset = stmt.execute("... ); Zugriff auf Rowcount: stmt.getrowcount(); Zugriff auf Resultset: stmt.getresultset (); Ressourcen freigeben stmt.close();

PreparedStatement Interface Bsp.: Lesen der Daten zu einem Mitarbeiter (empno, ename, sal) select empno, ename, sal from emp where empno = WERT Erzeugen PreparedStatement pstmt = conn.preparestatement ( select empno, ename, sal from emp where empno =? ); Ausführen z.b. Daten zu Mitarbeiter 1000 Parameter setzen: //Syntax setdatentyp (Parameternummer, Parameter) pstmt.setint(1,1000); Ausführen: ResultSet rs = pstmt.executequery(); Ressourcen freigeben stmt.close();

Für PreparedStatements ist die Wiederverwendung des QEP möglich (QEP = Query Execution Plan) Was bedeutet Wiederverwendung eines QEP? Serverseitige Verarbeitung von SQL-Anweisungen umfaßt Parsen Query Rewrite (nötig, wenn eine View involviert ist, ggf. sinnvoll, wenn intern in eine bessere Formulierung umgeformt wird) Optimierung Ausführung Bei der wiederholten Ausführung von PreparedStatements entfallen Parsen, Query Rewrite und Optimierung, falls der QEP wiederverwendet wird. Wie stellt das DBS fest, ob ein QEP wiederverwendet werden kann? Oracle verwendet einen Hash für die Map Statement Text => QEP Hash (Statement Text 1) QEP 1 Hash (Statement Text 2) QEP 2 Es gibt auch weniger effiziente Verfahren!

ResultSet JDBC 1: ResultSets sind forward only und read only Typischer Zugriff: Connection conn =...; Statement stmt = conn.createstatement(); resultset rs = stmt.executequery ( select empno, ename from emp where ); while(rs.next()) { // datentypverträglicher Zugriff über Spaltenposition, // beginnend mit 1! System.out.print(rs.getInt(1); // Zugriff über Spaltenname System.out.println(rs.getString( ename ); } rs.close(); stmt.close(); conn.close();

ResultSetMetaData liefern die Struktur einer Ergebnismenge ResultSetMetaData rsmd = rs.getmetadata(); Interessante Metadaten: Anzahl der Spalten (getcolumncount) Pro Spalte : Name Datentypinfo...

Result Sets in JDBC 2 und JDBC 3 Navigation: forward only (Vorwärtsbewegung über die Methode next() ) scrollable (direkter Zugriff): insensitiv sensitiv (konkurrierende Änderungen werden gesehen) Concurrency: read only updatable (update, delete, insert via ResultSet Interface möglich) Hold ResultSet wird nicht bei Transaktionsende automatisch geschlossen JDBC: createstatement (Navigation, Concurrency, Hold Spezifikation) preparestatement (Statement, Navigation, Concurrency, Hold Spezifikation)

ResultSets und optimistisches / pessimistisches Locking für Read for Update Situationen Optimistisches Locking (keine Lesesperren, Konfliktbehandlung in der Anwendung) Read Only ResultSet keine Lesesperren bzw. Sofortige Freigabe nach dem Lesen (automatisch für Oracle) Pessimistisches Locking (Serialisierung der lesenden Zugriffe durch Update Locks) Updatable ResultSet Voraussetzung genügt bei Oracle nicht, das Select muß die ROWID in der Select Liste umfassen und FOR UPDATE deklariert sein: select ROWID,... FOR UPDATE...

Batch Update Ein Statement Objekt kann assoziiert werden mit mehreren SQL-Anweisungen, die einen RowCount liefern (insert, update, delete) Hinzufügen einer SQL-Anweisung: stmt.addbatch(...) Ausführung aller SQL-Anweisungen zu dem Statement Objekt: int RowCount [] = stmt.executebatch() Löschen der Liste der SQL-Anweisungen: stmt.clearbatch(...) Vorteil Reduktion der Kommunikation Client-Server Ohne Batch Update pro SQL-Statement eine Kommunikation Mit Batch Update eine Kommunikation für mehrere SQL- Anweisungen Hinweis Prepared Statement reduziert Aufwand der Planerstellung Batch Update reduziert die Kommunikation Man kann bzw. muß (Oracle im JDBC Modus) beide Konzepte kombinieren!

Weitere Aspekte zur Performancesteigerung durch Reduktion der Kommunikation: Kommunikationspakete für lesende Zugriffe stmt.setfetchsize(zahl der Zeilen) Reduktion der Zahl der Datenbankzugriffe Weniger Selects, die jeweils mehr Ergebniszeilen liefern Verwendung von Stored Procedures und Triggern zur Verlagerung von Verarbeitung

Nicht behandelte JDBC Konzepte DatabaseMetaData Large Objects Stored Procedures Connection / Statement Pooling Distributed Transactions Rowsets