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

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

Datenbank und Informationssysteme

Java Database Connectivity-API (JDBC)

Einführung in JDBC. IFIS Universität zu Lübeck

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

Ziel: Verständnis für Konzepte von JDBC aufbauen

Java und Datenbanken

Datenbank und Informationssysteme

Client/Server-Programmierung

Java Database Connectivity-API (JDBC)

Datenbankanwendungen (JDBC)

Datenbanken & Informationssysteme Übungen Teil 1

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

11. JDBC. Grundsätzliche Nutzung von JDBC Verbindungsaufbau Anfragen Analyse des erhaltenen Ergebnisses Veränderungen des Ergebnisses

11 Anwendungsprogrammierung

Java Database Connectivity-API (JDBC)

Praktikum Datenbanksysteme

Datenbankentwurf & Datenbankzugriff mit JDBC. Georg Köster Sven Wagner-Boysen

Datenbanken und Informationssysteme

Wie kommen die Befehle zum DBMS

Java und Datenbanksysteme Datenbankanbindung mit JDBC

Datenbanksysteme I Datenbankprogrammierung Felix Naumann

Hauptschritte einer JDBC-App

Java Database Connectivity API / JDBC

JDBC Datenzugriff aus Java ETIS SS04

Java Database Connectivity (JDBC) Walther Rathenau Gewerbeschule 1

vs. Fehler zur Übersetzungszeit

6. Java Database Connectivity. Prof. Dr.-Ing. Wolfgang Lehner

Webbasierte Informationssysteme

Kurzübersicht JDBC. Marc Monecke. 15. Januar 2003

Programmieren II. Beispiele für RDBMS. Relationale Datenbanken. Datenbanken SQL. Dr. Klaus Höppner JDBC. Hochschule Darmstadt SS 2008

Tag 5 Inhaltsverzeichnis

Wie kommen die Befehle zum DBMS

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

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

9.4.1 JDBC und Transaktionsmanagement

Anwendungsentwicklung für relationale Datenbanken setzt voraus, dass prozedurale Abläufe programmiert werden können!

Eclipse und EclipseLink

JDBC- JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network. M. Löberbauer, T. Kotzmann, H. Prähofer

10 Anwendungsprogrammierung

Einbettung in SQL. Zwei Prinzipien: (1) Statische Einbettung

Datenbank Anbindung. Arthur Zaczek. Nov 2014

6. Übung - Datenbankprogrammierung

Tag 5 Inhaltsverzeichnis

Vorlesung Informatik II

Übung: Data Warehousing und Data Mining

Udo Matthias Munz. Datenbanken und SQL. mit. Einführung. Informationstechnik

JDBC. JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network. Institut für Systemsoftware, Johannes Kepler Universität Linz

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

Datenbankzugriff mit JDBC

3 Datenbankzugriff in Java

JSP, Tomcat, JDBC. Agenda. Übung Informationsintegration JSP & Tomcat JDBC. l Syntax. l Implizite Objekte. l Direktiven

Datenbank-Programmierung mit JDBC Weiterbildungsmaßnahme Technische und Praktische Informatik Sommersemester 2003

3. Stored Procedures und PL/SQL

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

Transaktionen in der Praxis. Dr. Karsten Tolle

Programmieren II. Relationale Datenbanken. Vorlesung 07. Handout S. 1. Martin Schultheiß. Hochschule Darmstadt Sommersemester 2011.

JDBC. Allgemeines ODBC. java.sql. Beispiele

JDBC (Stichworte) Udo Kelter

embedded SQL Embedded SQL wurde erstmals im SQL92- Standard definiert.

2. Datenbank-Programmierung

Datenbanken 1 für Mediennformatiker WS ODBC, JDBC und SQLJ: Datenbank-Anbindung an Anwendungsprogramme

Zugriff auf die Datenbank. Ulf Leser Wissensmanagement in der Bioinformatik

Anwendungsprogrammierung mit JDBC

Softwareentwicklung mit JAVA EE

Kapitel DB:VI (Fortsetzung)

Datenbankzugriff mit JDBC

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

Übung Datenbanksysteme I JDBC. Thorsten Papenbrock

Java und Datenbanken Ein Überblick

Datenbankanwendung. Prof. Dr.-Ing. Sebastian Michel TU Kaiserslautern. Wintersemester 2014/15.

Klausur zur Vorlesung Datenbanksysteme I

UNIVERSITÄT ULM Fakultät für Ingenieurswissenschaften und Informatik Institut für Datenbanken und Informationssysteme

Übung Datenbanksysteme I JDBC. Thorsten Papenbrock

JDBC. VU Datenbanksysteme. Wolfgang Fischl

Studienarbeit im Fach. Datenbanken

4. Objektrelationales Mapping Grundlagen der Programmierung II (Java)

JDBC. VL Datenbanksysteme. Ingo Feinerer

Enterprise Computing Einführung in das Betriebssystem z/os. Prof. Dr. Martin Bogdan Prof. Dr.-Ing. Wilhelm G. Spruth WS2012/2013

Datenbankzugriff über JDBC Datenbanken I (Systemorientierte Informatik IV) SS Einführung

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

Datenbankzugriff mit JDBC

Inhaltsverzeichnis. Bibliografische Informationen digitalisiert durch

Praktikum aus Softwareentwicklung 2, Stunde 7

Beispiel: DB-Mock (1/7)

Betreutes Programmieren Vorlesung Informatik II, Blatt 7 Musterlösung

Dokumentation zur Anlage eines JDBC Senders

3. Datenbankzugriff (JDBC) Grundlagen der Programmierung II (Java)

Verteidigung gegen SQL Injection Attacks

Modifikation der Datenbank

ODBC/JDBC. Vortrag im Rahmen der Projektgruppe Intelligente Datenbanken Prof. Dr. Manthey SS2003. Von. Margret Claaßen

Einführung in die Informatik II

Oracle: Abstrakte Datentypen:

Datenbankzugriff mit JDBC

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

Schnittstellen zur Anbindung an Datenbanksysteme

PHP. Prof. Dr.-Ing. Wolfgang Lehner. Diese Zeile ersetzt man über: Einfügen > Kopf- und

Entwicklung von Web-Anwendungen mit JAVA EE

Transkript:

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

Übersicht Architektur von JDBC Ziele von JDBC Grundstruktur eines JDBC-Programms Grundlegendes Beispiel Überblick über das Package java.sql Datenretrieval mit JDBC Parametrisierte Anweisungen Metadaten Datenmodifikation mit JDBC Ändernde Anweisungen Änderungen über einen Cursor Transaktionen mit JDBC Arbeiten mit Transaktionen Einstellen des Isolationslevels

Fragestellung BuchAusgabe.java Datenbank Bücher String Autor = Moore ; String Titel = Schwarzrock ; System.out.println( Autor + : + Titel); Autor Moore............ Titel Schwarzrock Wie kommen Werte aus der Datenbank in die Variablen unserer Anwendungen? Wie können wir Werte in unserem Programm in der Datenbank speichern?

Varianten der Zugriffstechnik SLI Statement Level Interface Einbettung von SQL-Anweisungen in den Programmcode Verarbeitung durch einen Präprozessor Beispiele: embedded SQL in C (esql/c), SQLJ CLI Call Level Interface Bibliothek mit Funktionen bzw. Klassen und Methoden für den Zugriff auf das DBMS Beispiele: ODBC (C/C++), JDBC (Java), ADO.NET (C#)

Ziele von JDBC SQL als Sprache für den Datenbankzugriff Gleichzeitiger Zugriff auf mehrere DBMS bzw. Datenbanken Adaptives Programmiermodell Einfachheit ( Keep it simple ) Robustheit, Verfügbarkeit, Skalierbarkeit Grundlage für andere Zugriffstechniken wie SQLJ oder JPA (Java Persistence API)

Architektur Java-Programm JDBC-API R JDBC JDBC-Treibermanager JDBC-Treiber-API R JDBC-Treiber DBMS Daten

Grundlegendes Beispiel Beispiel BuchJDBC.java in IntelliJ Einbinden des JDBC-Treibers, hier: JDBC-Treiber für PostgreSQL Schritt 1: JDBC-Treiber laden Schritt 2: Verbindung zum DBMS und zur Datenbank herstellen Schritt 3: Objekt für SQL-Anweisung erzeugen Schritt 4: DBMS Anweisung direkt ausführen lassen Schritt 5: Ergebnis anzeigen durch Iteration über den Cursor auf die Ergebnismenge Schritt 6: Fehler abfangen und Ressourcen freigeben

Interfaces und Klassen von JDBC Connection createstatement preparestatement preparecall Statement subclasses PreparedStatement subclasses CallableStatement Input to PreparedStatement Input/Output of CallableStatement executequery executequery Data types getxxx executequery getmoreresults / getresultset Quelle: JDBC-Spezifikation ResultSet

Übersicht Architektur von JDBC Ziele von JDBC Grundstruktur eines JDBC-Programms Grundlegendes Beispiel Überblick über das Package java.sql Datenretrieval mit JDBC Parametrisierte Anweisungen Metadaten Datenmodifikation mit JDBC Ändernde Anweisungen Änderungen über einen Cursor Transaktionen mit JDBC Arbeiten mit Transaktionen Einstellen des Isolationslevels

Arten von Statements Statement wird vom DBMS übersetzt, optimiert und ausgeführt PreparedStatement zweistufiges Verfahren Schritt 1: DBMS übersetzt und optimiert Schritt 2: Anweisung kann mehrfach mit immer neuen Parametern ausgeführt werden CallableStatement zum Aufruf von Stored Procedures

Beispiel einer parametrisierten Anweisung Wir möchten Bücher bestimmter Autoren suchen, siehe BuchSuche.java Parametrisierte Anweisungen verwenden Platzhalter Zuerst wird im DBMS der Zugriffsplan erstellt In der Schleife wird derselbe Zugriffsplan immer wieder aufgerufen

SQL-Injection Implementierung der Suche nach Büchern ohne Platzhalter, siehe BuchInjection.java Auf den ersten Blick erfüllt es dieselbe Funktionalität Aber: der Inhalt der Benutzereingabe wird vom DBMS interpretiert Deshalb ist SQL-Injection möglich Demo: Neue Tabelle demo mit einem Feld msg anlegen Einen Datensatz einfügen Angriff: Der Angreifer möchte die Tabelle demo löschen Was muss er eingeben? Diskussion

Ermitteln der Metadaten zu einer Ergebnismenge Interface ResultSetMetaData mit den Methoden: getcolumncount() getcolumnname(int column) getcolumntype(int column)

DatabaseMetaData Informationen über das DBMS und die Datenbank erhält man via das Interface DatabaseMetaData, zum Beispiel: getdatabaseproductname() getdrivername() gettables(...) getcolumns(...) supportsansi92fullsql()... unzählige Informationsfunktionen

Übersicht Architektur von JDBC Ziele von JDBC Grundstruktur eines JDBC-Programms Grundlegendes Beispiel Überblick über das Package java.sql Datenretrieval mit JDBC Parametrisierte Anweisungen Metadaten Datenmodifikation mit JDBC Ändernde Anweisungen Änderungen über einen Cursor Transaktionen mit JDBC Arbeiten mit Transaktionen Einstellen des Isolationslevels

Ändernde Anweisungen executequery für select... gibt ein Objekt vom Typ ResultSet zurück executeupdate Methode von Statement für update... oder insert... gibt die Zahl der betroffenen Zeilen zurück Was tun, wenn man den Typ der Anweisung zur Compile-Zeit nicht kennt? execute Methode von Statement für beliebige Anweisungen gibt einen boolschen Wert zurück: true bedeutet, dass eine Ergebnismenge erstellt wurde, kann man abholen mit getresultset false bedeutet, dass Daten geändert wurden, die Zahl der geänderten Zeilen kann man abholen mit getupdatecount

Arten von ResultSets Art der Bewegung des Cursors TYPE_FORWARD_ONLY TYPE_SCROLL_INSENSITIVE TYPE_SCROLL_SENSITIVE Lesender oder ändernder Cursor CONCUR_READ_ONLY CONCUR_UPDATABLE

Navigieren in ResultSets next() previous() first() last() beforefirst() afterlast() relative(int rows) absolute(int r)

Cursor verwenden in ResultSets Werte lesen rs.getstring(1) rs.getstring("author") Werte ändern auf den entsprechenden Datensatz navigieren rs.updatestring("author", "Geänderter Autor") rs.updaterow() Datensätze einfügen rs.movetoinsertrow() rs.updatestring("author", "Neuer Autor") rs.updatestring("title", "Neuer Titel")... rs.insertrow()

Übersicht Architektur von JDBC Ziele von JDBC Grundstruktur eines JDBC-Programms Grundlegendes Beispiel Überblick über das Package java.sql Datenretrieval mit JDBC Parametrisierte Anweisungen Metadaten Datenmodifikation mit JDBC Ändernde Anweisungen Änderungen über einen Cursor Transaktionen mit JDBC Arbeiten mit Transaktionen Einstellen des Isolationslevels

Auto-Commit-Modus Auto-Commit-Modus = Jede einzelne SQL-Anweisung wird automatisch in einer Transaktion durchgeführt, also automatisch bestätigt Für welche Art von Anwendungen ist der Auto-Commit-Modus nicht geeignet? Ausschalten des Auto-Commit-Modus: con.setautocommit( false ) Nun muss man im Programm das Transaktionsende bestätigen oder ein Rollback veranlassen: con.commit() con.rollback()

Blaupause für Transaktionen boolean autocommit = con.getautocommit(); Statement stmt; try { con.setautocommit( false ); stmt = con.createstatement(); stmt.execute(...); stmt.execute(...); stmt.execute(...);... con.commit(); } catch(sqlexception sqle) { con.rollback(); } finally { stmt.close(); con.setautocommit( autocommit ); }

Isolationslevel in JDBC Im Interface Connection werden die Isolationslevel definiert: TRANSACTION_NONE TRANSACTION_READ_UNCOMMITTED TRANSACTION_READ_COMMITTED (Default in JDBC) TRANSACTION_REPEATABLE_READ TRANSACTION_SERIALIZABLE Einstellen durch con.settransactionisolation( int Level ) Das eingestellte Level gilt dann für alle folgenden Transaktionen, bis es umgestellt wird