Universität Augsburg, Institut für Informatik WS 2009/2010 Prof. Dr. W. Kießling 18. Dez Dr. A. Huhn, F. Wenzel, M. Endres Lösungsblatt 8

Ähnliche Dokumente
Universität Augsburg, Institut für Informatik WS 2009/2010 Prof. Dr. W. Kießling 11. Dez Dr. A. Huhn, F. Wenzel, M. Endres Lösungsblatt 7

Universität Augsburg, Institut für Informatik WS 2006/2007 Dr. W.-T. Balke 11. Dez M. Endres, A. Huhn, T. Preisinger Lösungsblatt 7

Datenbanksysteme I. Aufgabe 1: Views und Temporäre Relationen. Lösungsvorschlag:

Universität Augsburg, Institut für Informatik WS 2014/2015 Prof. Dr. W. Kießling 28. Nov F. Wenzel, L. Rudenko Lösungsblatt 6

Universität Augsburg, Institut für Informatik WS 2016/2017 Prof. Dr. W. Kießling 23. Dez L. Rudenko, Dr. F. Wenzel Lösungsblatt 9

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

Einführung in die Informatik II

Oracle: Abstrakte Datentypen:

Klausur Datenbanken II

Universität Augsburg, Institut für Informatik WS 2006/2007 Dr. W.-T. Balke 27. Nov M. Endres, A. Huhn, T. Preisinger Lösungsblatt 5

Client/Server-Programmierung

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

Die Anweisung create table

Musterlösung Übungsblatt 11

Funktionen. Überblick über Stored Functions. Syntax zum Schreiben einer Funktion. Schreiben einer Funktion

Klausur zur Vorlesung Datenbanksysteme I

Dipl. Inf. Dipl. Math. Y. Orkunoglu Datum:

Kapitel 4 Dynamisches SQL

Datenbanksysteme 2013

Exercises for the course Databases and Information Systems I WS 2006/2007 Special exercise JDBC

Vorlesung Informatik II

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

Übungsblatt 8- Lösungsvorschlag

Willkommen. Datenbanken und Anbindung

Datenbanksysteme 2 Fachbereich Angewandte Informatik WS 11/12 Dipl.-Inf. Christian Pape. 6. Übung

11 Anwendungsprogrammierung

Kapitel 4 Dynamisches SQL

Datenbankanwendungen (JDBC)

Inhalt. Ein Einführung in die Nutzung von SQL-Datenbanken am Beispiel Oracle. Daten und Tabellen - ein Beispiel. Daten und Tabellen - Normalisierung

5.8 Bibliotheken für PostgreSQL

Datenbanksysteme. Dominic Pacher. Datenbanken und Informationssysteme (DBIS) Institut für Informatik Universität Innsbruck. dbis-informatik.uibk.ac.

Kapitel 9. Embedded SQL. Prof. Dr. Wolfgang Weber Vorlesung Datenbanken 1

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

Grundlagen der Informatik

Übung PL/SQL Trigger Lösungen

NoSQL mit Postgres 15. Juni 2015

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

Seminar 2. SQL - DML(Data Manipulation Language) und. DDL(Data Definition Language) Befehle.

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

12. Programmierung in der Datenbank

Grundlagen von SQL. Informatik 2, FS18. Dr. Hermann Lehner (Material von Dr. Markus Dahinden) Departement Informatik, ETH Zürich

Datenbanksysteme I. Klausur zum Praktikum. Mehrere Professoren prüfen mit genau einem Beisitzer genau einen Studenten.

Isolationsstufen für Transaktionen. Dr. Karsten Tolle

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

Bitte tragen Sie sofort und leserlich Namen, Studienkennzahl und Matrikelnummer ein und legen Sie Ihren Studentenausweis

Transaktionen in Praxis. Dr. Karsten Tolle Vorl

PostgreSQL Ein Überblick

Beispiel: DB-Mock (1/7)

ISU 1. Ue_08/02_Datenbanken/SQL. 08 Datenbanken. Übung. SQL Einführung. Eckbert Jankowski.

Introduction to Data and Knowledge Engineering. 6. Übung SQL

Oracle & Java HOW TO

Java Tools JDK. IDEs. Downloads. Eclipse. IntelliJ. NetBeans. Java SE 8 Java SE 8 Documentation

Oracle 10g Einführung

Kapitel 8: Datenintegrität

WS 2010/11 Datenbanksysteme Fr 15:15 16:45 R Vorlesung #3. SQL (Teil 1)

Webbasierte Informationssysteme

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

Modifikation der Datenbank

Dies ist eine Probeklausur, die keine formalen Schlüsse auf die Form, die Struktur oder den Inhalt der endgültigen Klausur zulässt.

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

Hochschule Karlsruhe Technik und Wirtschaft Anhänge: Fakultät für Informatik und Wirtschaftsinformatik SS 2013 Prof. Schmidt.

Whitepaper. Produkt: combit Relationship Manager. Datensatzhistorie mit dem SQL Server 2000 und combit GmbH Untere Laube Konstanz

Wie kommen die Befehle zum DBMS

4. Objektrelationales Typsystem Kollektionstypen. Nested Table

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

Aufbau eines dynamischen ETL Frameworks auf Basis eines PL/SQL Codegenerators

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

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

Dieser Foliensatz darf frei verwendet werden unter der Bedingung, dass diese Titelfolie nicht entfernt wird.

7. Datenbank-Zugriff. Vorlesung und Übung Dr. Peter Pfahler Institut für Informatik Universität Paderborn. Zum Beispiel aus PHP-Skripten: Client 7-2

Transaktionen in der Praxis. Dr. Karsten Tolle

Lösungen der Übungsaufgaben von Kapitel 10

Datenbanksysteme I Übung: JDBC. Jana Bauckmann

TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D.

DATENBANKEN SQL UND SQLITE VON MELANIE SCHLIEBENER

Zugriff auf die Datenbank. Ulf Leser Wissensmanagement in der Bioinformatik

4.2 Workshop EJB. Entwicklung von EJB-Anwendungen

Java Database Connectivity-API (JDBC)

MySQL mit MyLinux. 2/2003 Java unter Linux

3 Query Language (QL) Einfachste Abfrage Ordnen Gruppieren... 7

Kapitel DB:VI (Fortsetzung)

Wiederholung VU Datenmodellierung

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

Mehr Performance mit JDBC JAVA-Anwendungen und die Oracle-Datenbank. Carsten Czarski Business Unit Database Oracle Deutschland GmbH

Java Database Connectivity-API (JDBC)

Datenmanagement I SoSe 2006 Aufgabenblatt 4

Database. Creates. -- Kunde(knr, nname, vname, adresse:adresse.aid) CREATE TABLE Kunde ( NUMERIC(13) PRIMARY KEY,

Daten-Definitionssprache (DDL) Bisher: Realwelt -> ERM -> Relationen-Modell -> normalisiertes Relationen-Modell. Jetzt: -> Formulierung in DDL

Webbasierte Informationssysteme

1 Hartmann Anna Cäcilienstr Köln (0221) Behrens-Hoffmeister Heidi Lindenweg Köln (0221)

Chancen und Wachstumsfelder für PostgreSQL

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

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

Multimedia im Netz Wintersemester 2013/14. Übung 02 (Hauptfach)

Dipl. Inf. Eric Winter. PostgreSQLals HugeData Storage Ein Erfahrungsbericht

10. Programmieren in SQL

Anwendungsentwicklung Datenbanken SQL. Stefan Goebel

AG Datenbanken und Informationssysteme Wintersemester 2006 / Übungsblatt

Probeklausur Datenbanktechnologie

Bitte tragen Sie sofort und leserlich Namen, Studienkennzahl und Matrikelnummer ein und legen Sie Ihren Studentenausweis

Transkript:

Universität Augsburg, Institut für Informatik WS 2009/2010 Prof. Dr. W. Kießling 18. Dez. 2009 Dr. A. Huhn, F. Wenzel, M. Endres Lösungsblatt 8 Aufgabe 1: JDBC 2.0 und Scrollable Result Sets Datenbanksysteme I Lösungen unter Berücksichtigung bereits implementierter Methoden aus Übungsblatt 7: a) Methodenaufruf zur Erstellung der new product Relation: executestatement("create TABLE new_product AS SELECT * FROM s_product"); b) Methode, die ein Scrollable Result Set zurückliefert, das wenn möglich updatebar ist: private ResultSet executejdbc2statement(string statement){ Statement stmt = this.openconnection.createstatement(resultset.type_scroll_sensitive, ResultSet.CONCUR_UPDATABLE); return stmt.executequery(statement); return null; Methodenaufruf und Bearbeitung des Result Sets um die unverbindliche Preisempfehlung zu erhöhen: ResultSet rs = executejdbc2statement("select id, name, suggested_whlsl_price FROM new_product"); rs.last(); float price = rs.getfloat("suggested_whlsl_price"); rs.updatefloat("suggested_whlsl_price", price+10); rs.updaterow(); System.out.println("Update Result: "); 1

c) Einfügen eines neuen Produkteintrags mittels Cursor: rs = executejdbc2statement("select id, name, short_desc, suggested_whlsl_price, whlsl_units FROM new_product"); rs.last(); int id = rs.getint("id"); rs.movetoinsertrow(); rs.updatestring("id", new Integer(id+1).toString()); rs.updatestring("name", "SpiderPig Protection Gear"); rs.updatestring("short_desc", "keeps your pig save"); rs.updatefloat("suggested_whlsl_price", (float) 11.99); rs.updatestring("whlsl_units", "100"); rs.insertrow(); System.out.println("Insert Result: "); d) Löschen des vierten Tupels aus der Relation: rs = executejdbc2statement("select id, name, short_desc, suggested_whlsl_price, whlsl_units FROM new_product"); rs.absolute(4); rs.deleterow(); System.out.println("Delete Result: "); e) Result Set, das alle Produktnamen und Ids enthält, die bereits in einer Bestellung vorkamen: rs = executejdbc2statement("select p.id, p.name FROM s_product p, s_item i WHERE p.id = i.product_id"); System.out.println("Scrollable Result Set with Join updatable? " + (rs.getconcurrency() == ResultSet.CONCUR_UPDATABLE)); Das Result Set ist nicht updatebar, da es sich nicht nur auf eine Relation bezieht, sondern einen Join enthält. Ein Update könnte somit nicht eindeutig den Basisrelationen zugeordnet werden. Folgende Erklärung bestätigt die Beobachtung: In some situations, a driver may need to choose an alternate result set type or concurrency type at statement execution time. For example, a SELECT statement that contains a join over multiple tables might produce a result set that is not updatable.[...] The driver will then choose an appropriate result set type and/or concurrency type [...]. Aus: http://java.sun.com/j2se/1.5.0/docs/guide/jdbc/getstart/resultset.html 2

f) Intuitive Definition eines Result Sets, das alle Tupel der Relation enthält: rs = executejdbc2statement("select * FROM new_product"); System.out.println("Result Set with SELECT * updatable? "+ (rs.getconcurrency() == ResultSet.CONCUR_UPDATABLE)); Dieses Result Set ist nicht updatebar, wie dem Test auf rs.getconcurrency() und der angegebenen Oracle JDBC Dokumentation zu entnehmen ist. Als Workaround gibt die Dokumentation folgende Lösung an: rs = executejdbc2statement("select p.* FROM new_product p"); System.out.println("Workaround SELECT p.* updatable? " + (rs.getconcurrency()==resultset.concur_updatable)); Aufgabe 2: Erstellen einer Multimedia-Datenbank Grundlage sind wiederum bereits implementierte Methoden aus Übunsblatt 7 (siehe Lösung 7): a) siehe Methode private boolean establishconnection() b) Methodenaufruf der bereits implementierten Methode executestatement mit entsprechender DDL: executestatement("create table Papers(" + "id integer primary key," + "title varchar(100)," + "pdf blob)"); c) Neue Methode, die Batch Updates ausführt: private void insertvalues() throws SQLException { try{ //set auto-commit to false for batch updates this.openconnection.setautocommit(false); Statement stmt = this.openconnection.createstatement(); // add inserts to batch // initialize blobs as EMPTY_BLOB() stmt.addbatch("insert into Papers values(1, ECTS-GRUNDSÄTZE, EMPTY_BLOB())"); stmt.addbatch("insert into Papers values(2, PRINCIPALES CARACTERISTIQUS DE L ECTS, EMPTY_BLOB())"); stmt.addbatch("insert into Papers values(3, CARACTERÍSTICAS PRINCIPALES DE LOS ECTS, EMPTY_BLOB())"); // execute batch and commit stmt.executebatch(); this.openconnection.commit(); stmt.close(); 3

catch (BatchUpdateException e) { // in case of batch update error -> rollback this.openconnection.rollback(); // in case of SQL error -> rollback this.openconnection.rollback(); finally { // set auto-commit to true and close statement this.openconnection.setautocommit(true); Zur Ausführung der Batch-Updates wird Auto-Commit deaktiviert. Anschließend werden die Werte eingefügt und eventuell auftretende Fehler mit einem Rollback rückgängig gemacht. d) Erstellen der Stored Procedure wie in Aufgabenblatt 7 via Methodenaufruf von executestatement(): String procedure = new String("create procedure INSERT_PDF(idi integer, pdfi blob) as begin " + "update Papers set pdf = pdfi " + "where id = idi; end INSERT_PDF;"); executestatement(procedure); e) Methode zum Einfügen der Pdfs: private void insertdata(integer id, String pdf) throws Exception { File pdffile= new File(pdf); FileInputStream pdffis = new FileInputStream(pdfFile); // prepare call for the stored procedure CallableStatement cstmt = this.openconnection.preparecall("{call INSERT_PDF(?,?)"); cstmt.setint(1,id); // setting the id cstmt.setbinarystream(2, pdffis, (int)pdffile.length()); //setting the PDF // execute cstmt.executeupdate(); // closing file input stream pdffis.close(); cstmt.close(); catch(exception e){ Die Methode ist mit den entsprechenden Pfadangaben als Parameter pdf aufzurufen. Sind die Dateien direkt im Eclipse Projekt eingebunden, so lautet der entsprechende Methodenaufruf: insertdata(1, "key_de.pdf"); insertdata(2, "key_fr.pdf"); insertdata(3, "key_es.pdf"); 4

Ob das Einfügen der Blobs erfolgreich war, kann mittels SQL-Developer mit folgendem Statement überprüft werden, welches die Dateigrößen der Blobs anzeigt: SELECT ID, DBMS_LOB.GETLENGTH(PDF) FROM Papers; 5