Musterlösung Übungsblatt 11

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

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

Willkommen. Datenbanken und Anbindung

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

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

Oracle: Abstrakte Datentypen:

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

Java Database Connectivity (JDBC) Walther Rathenau Gewerbeschule 1

Betreutes Programmieren Vorlesung Informatik II, Blatt 7 Musterlösung

Datenbankzugriff mit JDBC

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

Datenbank und Informationssysteme

Client/Server-Programmierung

Einführung in die Informatik II

Oracle & Java HOW TO

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

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

Klausur Datenbanken II

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

Entwicklungsumgebung für die Laborübung

11 Anwendungsprogrammierung

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

Datenbanksysteme I Datenbankprogrammierung Felix Naumann

JDBC. Java DataBase Connectivity

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

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

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

Datenbanksysteme 2013

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

Übersicht der wichtigsten MySQL-Befehle

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

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

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

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

Java Database Connectivity-API (JDBC)

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

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

Einführung in SQL. 1. Grundlagen SQL. Structured Query Language. Viele Dialekte. Unterteilung: i. DDL (Data Definition Language)

Vorlesung Informatik II

5.8 Bibliotheken für PostgreSQL

MySQL-Befehle. In diesem Tutorial möchte ich eine kurze Übersicht der wichtigsten Befehle von MySQL geben.

Anwendungsentwicklung Datenbanken SQL. Stefan Goebel

Wiederholung VU Datenmodellierung

Oracle 10g Einführung

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

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

Datenbanken (Übung 12)

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

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

Java Database Connectivity-API (JDBC)

Tag 5 Inhaltsverzeichnis

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

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

Oracle native json Support. Erste Schritte

Modifikation der Datenbank

PROGRAMMIERPROJEKT 2016 VERWENDETE TECHNOLOGIEN

Einführung in SQL. Sprachumfang: Indizes. Datensätzen. Zugriffsrechten

Die Anweisung create table

Java Database Connectivity-API (JDBC)

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

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

Mengenvergleiche: Alle Konten außer das, mit dem größten Saldo.

Tag 5 Inhaltsverzeichnis

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

Klausur zur Vorlesung Datenbanksysteme I

JDBC. Allgemeines ODBC. java.sql. Beispiele

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

Grundlagen der Informatik 2

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

Entwicklungsumgebung für die Laborübung

Webbasierte Informationssysteme

Praktikum zu Einführung in die Informatik für LogWings und WiMas Wintersemester 2013/14

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

SQL Tutorial. SQL - Tutorial SS 06. Hubert Baumgartner. INSO - Industrial Software

Kapitel DB:VI (Fortsetzung)

Übungsaufgaben mit Lösungen

Beispiel: DB-Mock (1/7)

Grundlagen der Informatik 2

PostgreSQL unter Debian Linux

CoMa 04. Java II. Paul Boeck. 7. Mai Humboldt Universität zu Berlin Institut für Mathematik. Paul Boeck CoMa 04 7.

Datenbank und Tabelle mit SQL erstellen

Abfragen (Queries, Subqueries)

Datenmanagement I SoSe 2006 Aufgabenblatt 4

Datenbank- und Informationssysteme. Lösungsvorschläge zu Übungsblatt 2. Sommersemester CREATE DOMAIN KennzeichenDomain AS VARCHAR(9);

Hauptschritte einer JDBC-App

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

Einführung in die Programmierung WS 2009/10. Übungsblatt 7: Imperative Programmierung, Parameterübergabe

Kapitel DB:VI (Fortsetzung)

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

Webbasierte Informationssysteme

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

DATENBANKEN SQL UND SQLITE VON MELANIE SCHLIEBENER

Lambda Expressions in Java 8

Prozedurale Datenbank- Anwendungsprogrammierung

Übung PL/SQL Trigger Lösungen

Nachtrag: Farben. Farbblindheit. (Light und Bartlein 2004)

dbis Praktikum DBS I SQL Teil 2

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

JDBC (Stichworte) Udo Kelter

Kapitel 4 Dynamisches SQL

Transkript:

Julia Wolters Abgabe: 06.07.2009 Aufgabe 41 1 Aufgabe 41 2 3 CREATE TABLE auftraege ( 4 anfang TIMESTAMP NOT NULL, 5 ende TIMESTAMP, 6 kunde VARCHAR, 7 beschreibung VARCHAR, 8 PRIMARY KEY ( anfang, kunde, beschreibung ) 9 ) ; 10 11 INSERT INTO auftraege VALUES ( 2006-12-06 09:00, 2006-12-06 12:00, Mueller, Nikolausen ) ; 12 INSERT INTO auftraege VALUES ( 2006-12-02 15:00, 2006-12-02 15:32, Meier, Foo ) ; 13 INSERT INTO auftraege VALUES ( 2006-12-08 12:38, 2006-12-08 22:05, Meier, Bar ) ; 14 INSERT INTO auftraege VALUES ( 2006-12-04 12:38, 2006-12-05 11:11, Meier, Foobar2 ) ; 15 INSERT INTO auftraege VALUES ( 2006-04-28 23:30, 2006-05-02 10:00, Meier, Foobar3 ) ; 16 INSERT INTO auftraege VALUES ( 2006-04-20 12:00, 2006-12-01 12:00, Muster AG, Testen ) ; 17 18 a ) Arbeitszeit pro Auftrag ausrechnen 19 DROP VIEW auftraege_dauer ; 20 CREATE VIEW auftraege_dauer AS 21 SELECT, ( ende anfang ) AS dauer FROM auftraege ; 1

Übung WS 08 09 Freitag, 10 12 Uhr 22 23 SELECT FROM auftraege_dauer ; 24 25 SELECT EXTRACT ( MINUTE FROM dauer ) as minuten, EXTRACT ( HOUR FROM dauer ) as stunden, 26 ( CASE 27 WHEN EXTRACT ( MINUTE FROM dauer ) = 0 THEN 0 28 WHEN EXTRACT ( MINUTE FROM dauer ) < 15 THEN 15 29 WHEN EXTRACT ( MINUTE FROM dauer ) < 30 THEN 30 30 WHEN EXTRACT ( MINUTE FROM dauer ) < 45 THEN 45 31 ELSE 60 32 END ) AS minuten15 FROM auftraege_dauer ; 33 34 SELECT kunde, beschreibung, dauer, dauer + ( ( 35 ( CASE 36 WHEN EXTRACT ( MINUTE FROM dauer ) = 0 THEN 0 37 WHEN EXTRACT ( MINUTE FROM dauer ) < 15 THEN 15 38 WHEN EXTRACT ( MINUTE FROM dauer ) < 30 THEN 30 39 WHEN EXTRACT ( MINUTE FROM dauer ) < 45 THEN 45 40 ELSE 60 41 END ) EXTRACT ( MINUTE FROM dauer ) ) interval 1 minute ) AS dauer15 42 FROM auftraege_dauer ; 43 44 b ) Auftragsdauer für jeden Auftraggeber aufaddieren 45 46 SELECT kunde, sum ( dauer ) FROM auftraege_dauer GROUP BY kunde ; 47 48 c ) Kunden mit Aufträgen zwischen 0 1. 0 5. 2 0 0 6 und 3 0. 1 1. 2 0 0 6 49 50 SELECT DISTINCT kunde from auftraege 51 WHERE ende >= DATE 2006-05-01 AND anfang <= DATE 2006-11-30 ; 52 53 oder 54 55 SELECT DISTINCT kunde from auftraege 56 WHERE ( anfang, ende ) OVERLAPS ( DATE 2006-05-01, DATE 2006-11-30 ) ; 57 58 d ) Aufträge zwischen 2 0: 0 0 und 0 6: 0 0 Uhr oder an Wochenenden 59 60 SELECT FROM auftraege_dauer WHERE 61 Zwischen 20 und 6 Uhr? 62 ( extract ( hour from anfang ) between 20 and 2 4) or 63 ( extract ( hour from anfang ) between 0 and 6) or 64 ( extract ( hour from ende ) between 20 and 2 4) or 65 ( extract ( hour from ende ) between 0 and 6) or 66 ( extract ( dow from anfang ) < extract ( dow from ende ) ) or 67 ( dauer > INTERVAL 1 day ) 68 Anfang am Wochenende? 2 Julia Wolters

Freitag, 10 12 Uhr Übung WS 08 09 69 or extract ( dow from anfang ) = 0 or extract ( dow from anfang ) = 6 70 Ende am Wochenende? 71 or extract ( dow from ende ) = 0 or extract ( dow from ende ) = 6 72 Anfang und Ende in der Woche, aber in unterschiedlichen Wochen eigentlich unnötig 73 or ( extract ( dow from anfang ) between 1 and 5 74 and extract ( dow from ende ) between 1 and 5 75 and ( extract ( week from anfang ) < extract ( week from ende ) 76 or extract ( year from anfang ) < extract ( year from ende ) ) ) ; 77 78 e ) Aufträge an denen gerade gearbeitet wird 79 80 SELECT FROM auftraege WHERE anfang < now ( ) AND ( now ( ) < ende OR ende IS NULL ) ; 81 82 f ) Durchschnittliche Wochenarbeitszeit für abgeschlossene Aufträge 83 84 SELECT min ( anfang ), max ( ende ), max ( ende ) min ( anfang ) AS zeitraum, 85 extract ( days from ( max ( ende ) min ( anfang ) ) ) as gesamttage, 86 sum ( dauer ) AS gesamtdauer, 87 ( sum ( dauer ) / extract ( days from ( max ( ende ) min ( anfang ) ) ) ) 7 AS wochendauer 88 FROM auftraege_dauer 89 WHERE ende < now ( ) AND ende IS NOT NULL ; Julia Wolters 3

4 Julia Wolters Übung WS 08 09 Freitag, 10 12 Uhr

Freitag, 10 12 Uhr Aufgabe 43 Übung WS 08 09 angestellter Schulz Meier Müller Schmidt Tupelnikus Relationica Tadagoliker vorgesetzter Schulz Schulz Meier Schulz Müller Tupelnikus Müller (a) Beim Löschen eines Tupels werden alle referenzierenden (nicht referenzierten) Tupel auch gelöscht. (b) angestellter Schulz Meier (1) Müller Schmidt (2) Tupelnikus (3) Relationica (2) Tadagoliker vorgesetzter Schulz Schulz Meier Schulz Müller Tupelnikus Müller Aufgabe 44 1 import java. sql. ; 2 import java. util. GregorianCalendar ; 3 import java. util. StringTokenizer ; 4 5 / 6 Diese Klasse s t e l l t d i e Verbindung zu e i n e r SQL Datenbank über JDBC her und f ü h r t 7 Operationen auf e i n e r e v e n t u e l l noch zu erzeugenden T a b e l l e personendaten durch. Die Daten 8 der T a b e l l e entstammen einem Array { @link PersonenJDBC. persons } von { @link Person} Objekten, 9 d i e j e w e i l s d i e Daten b e z ü g l i c h e i n e r Person e n t h a l t e n. 10 11 @author Henrik Blunck 12 @author Jörg Mensmann 13 @version 1.1 14 / Julia Wolters 5

Übung WS 08 09 Freitag, 10 12 Uhr 15 p u b l i c c l a s s PersonenJDBC { 16 17 p u b l i c s t a t i c f i n a l String PSQL_DRIVER = "org.postgresql.driver" ; 18 p u b l i c s t a t i c f i n a l String MYSQL_DRIVER = "com.mysql.jdbc.driver" ; 19 20 p r i v a t e Connection db ; 21 p r i v a t e String dbname ; 22 p r i v a t e String username ; 23 p r i v a t e String password ; 24 25 // Der Datenbestand, der in d i e Datenbank i n t e g r i e r t werden s o l l 26 p r i v a t e Person [ ] persons = { 27 new Person ( "Jackson", "Michael", 1732345, new GregorianCalendar (1966, 11, 9), Person. MALE ), 28 new Person ( "Bolton", "Michael", 5322345, new GregorianCalendar (1965, 1, 17), Person. MALE ), 29 new Person ( "Gabriel", "Peter", 4632345, new GregorianCalendar (1959, 4, 5), Person. MALE ), 30 new Person ( "Jackson", "Jennifer", 2323345, new GregorianCalendar (1980, 7, 23), Person. FEMALE ), 31 new Person ( "Hooker", "John Lee", 1342345, new GregorianCalendar (1916, 3, 7), Person. MALE ), 32 new Person ( "Turner", "Tina", 2532345, new GregorianCalendar (1958, 1, 17), Person. FEMALE ), 33 new Person ( "Rush", "Jennifer", 6132345, new GregorianCalendar (1961, 3, 21), Person. FEMALE ) 34 } ; 35 36 p u b l i c PersonenJDBC ( ) { 37 } 38 39 / 40 Abarbeitung der in der A u f g a b e n s t e l l u n g angegebenen Anforderungen 41 / 42 p u b l i c void dorequiredoperations ( ) { 43 // String Variable, das j e w e i l s d i e SQL Statements a l s Z e i c h e n k e t t e h ä l t 44 String sqlstring ; 45 // Das ResultSet, das j e w e i l s d i e Ergebnisse e i n z e l n e r Anfragen h ä l t 46 ResultSet rs ; 47 boolean tableexists = true ; 48 // Test, ob T a b e l l e mit Namen personendaten b e r e i t s e x i s t i e r t 49 try { 50 // db. getmetadata ( ) l i e f e r t DatabaseMetaData Objekt. g e t T a b l e s (.. ) l i e f e r t 51 // ResultSet, dass a l l e Tabellen e n t h ä l t, d i e d i e mit den durch d i e Parametern 6 Julia Wolters

Freitag, 10 12 Uhr Übung WS 08 09 52 // gegebenen K r i t e r i e n übereinstimmen. next ( ) g i b t f a l s e zurück, f a l l s kein 53 // n ä c h s t e s Element im R e s u l t S e t e x i s t i e r t e. 54 rs = db. getmetadata ( ). gettables ( "", "", "personendaten", n u l l ) ; 55 rs. beforefirst ( ) ; 56 tableexists = rs. next ( ) ; 57 } catch ( SQLException e ) { 58 reactonsqlexception ( e ) ; 59 } 60 61 // F a l l s Tabellen n i c h t e x i s t i e r t e, erzeuge und f ü l l e s i e 62 i f (! tableexists ) { 63 // Tabellenschema erzeugen 64 try { 65 System. out. println ( "Erzeuge Tabellen..." ) ; 66 constructpersondatabase ( ) ; 67 } catch ( SQLException sqlexception ) { 68 reactonsqlexception ( sqlexception ) ; 69 } 70 } 71 72 // T a b e l l e f ü l l e n mit den Daten aus dem Person Array persons 73 try { 74 fillpersondatabase ( ) ; 75 } catch ( SQLException sqlexception ) { 76 reactonsqlexception ( sqlexception ) ; 77 } 78 79 // Auslesen des gesamten Datenbestandes der T a b e l l e personendaten und Ausgabe 80 try { 81 sqlstring = " SELECT * FROM personendaten" ; 82 rs = executequery ( sqlstring ) ; 83 System. out. println ( " Datenbank nach dem Einlesen des Datenbestandes:" ) ; 84 printresultset ( rs, 5) ; 85 } catch ( SQLException sqlexception ) { 86 reactonsqlexception ( sqlexception ) ; 87 } 88 89 // Löschen d e s Person Arrays und Neuanlegen mit den den Daten aus d e r Personen Datenbank 90 try { 91 persons = n u l l ; 92 persons = extractpersonsfromdatabase ( ) ; 93 } catch ( SQLException sqlexception ) { 94 reactonsqlexception ( sqlexception ) ; 95 } Julia Wolters 7

Übung WS 08 09 Freitag, 10 12 Uhr 96 97 98 // Ausgabe der Objekte in persons [ ] 99 System. out. println ( "Ausgabe der Objekte in persons[]:" ) ; 100 f o r ( i n t i = 0 ; i < persons. length ; i++) { 101 persons [ i ]. printperson ( ) ; 102 } 103 104 // Anfrage an d i e Datenbank und Anzeigen i n d e r Konsole : Die Anfrage g i b t Vor und 105 // Nachnamen a l l e r Personen, deren Nachname mit J beginnt, geordnet nach 106 // a u f s t e i g e n d e n Nachnamen zurück. 107 try { 108 sqlstring = " SELECT lastname, firstname FROM personendaten WHERE" + 109 " lastname LIKE J% " ; 110 rs = executequery ( sqlstring ) ; 111 System. out. println ( " Datenbestand selektiert mit: " + sqlstring 112 + " " ) ; 113 printresultset ( rs, 2) ; 114 } c a t c h ( SQLException sqlexception ) { 115 reactonsqlexception ( sqlexception ) ; 116 } 117 118 // Anfrage an d i e Datenbank und Anzeigen i n d e r Konsole : Die Anfrage g i b t Vor und 119 // Nachnamen und Geburtsdaten a l l e r Personen, d i e vor 1960 geboren sind, geordnet nach 120 // a u f s t e i g e n d e n Geburtstagen zurück. 121 try { 122 sqlstring = " SELECT lastname, firstname, dayofbirth FROM" + 123 " personendaten WHERE dayofbirth < 1960 1 1 order" + 124 " by dayofbirth" ; 125 rs = executequery ( sqlstring ) ; 126 System. out. println ( " Datenbestand selektiert mit: " + sqlstring 127 + " " ) ; 128 printresultset ( rs, 3) ; 129 } c a t c h ( SQLException sqlexception ) { 130 reactonsqlexception ( sqlexception ) ; 131 } 132 133 // Anfrage an d i e Datenbank und Anzeigen i n d e r Konsole : Die Anfrage g i b t Vor und 134 // Nachnamen und Geburtsdaten a l l e r w e i b l i c h e n Personen, d i e zwischen 1960 und 1970 135 // geboren sind, geordnet nach a u f s t e i g e n d e n Geburtstagen zurück. 136 try { 8 Julia Wolters

Freitag, 10 12 Uhr Übung WS 08 09 137 sqlstring = " SELECT lastname, firstname, dayofbirth FROM" + 138 " personendaten WHERE dayofbirth >= 1960 1 1 " + 139 " and dayofbirth < 1970 1 1 and gender = female " + 140 " order by dayofbirth" ; 141 rs = executequery ( sqlstring ) ; 142 System. out. println ( " Datenbestand selektiert mit: " + sqlstring 143 + " " ) ; 144 printresultset ( rs, 3) ; 145 } c a t c h ( SQLException sqlexception ) { 146 reactonsqlexception ( sqlexception ) ; 147 } 148 149 // Einfügen des genannten neuen E i n t rages 150 try { 151 db. setautocommit ( f a l s e ) ; 152 sqlstring = " DELETE FROM personendaten WHERE lastname = Jackson " ; 153 executeupdate ( sqlstring ) ; 154 sqlstring = " INSERT INTO personendaten values ( Jackson, Five, 5, NULL, NULL)" ; 155 executeupdate ( sqlstring ) ; 156 db. commit ( ) ; 157 db. setautocommit ( true ) ; 158 } c a t c h ( SQLException sqlexception ) { 159 reactonsqlexception ( sqlexception ) ; 160 } 161 162 163 // S c h l i e s s e n der Verbindung 164 try { 165 db. close ( ) ; 166 } c a t c h ( SQLException sqlexception ) { 167 reactonsqlexception ( sqlexception ) ; 168 } 169 } 170 171 / 172 Legt d i e T a b e l l e persondendaten in der Datenbank an 173 174 @throws SQLException 175 / 176 p u b l i c v o i d constructpersondatabase ( ) throws SQLException { 177 String sqlstring ; 178 Statement stmt ; 179 180 // Erzeugen der T a b e l l e 181 sqlstring = " CREATE TABLE personendaten ( lastname VARCHAR (20)," + 182 " firstname VARCHAR (20), ssn integer, dayofbirth CHAR(12)," + Julia Wolters 9

Übung WS 08 09 Freitag, 10 12 Uhr 183 " gender CHAR(6), PRIMARY KEY ( ssn), CHECK" + 184 " (gender in ( male, female )));" ; 185 stmt = db. createstatement ( ) ; 186 stmt. execute ( sqlstring ) ; 187 } 188 189 / 190 Führt e i n e Anfrage an d i e verbundende Datenbank aus. 191 192 @param s q l S t r i n g Das auszuführende SQL Statement a l s S t r i n g. 193 @return Das ResultSet, das das Ergbnis der Anfrage an d i e Datenbank e n t h ä l t. 194 @throws SQLException 195 / 196 p u b l i c ResultSet executequery ( String sqlstring ) throws SQLException { 197 Statement statement = db. createstatement ( ResultSet. TYPE_SCROLL_INSENSITIVE, 198 ResultSet. CONCUR_UPDATABLE ) ; 199 return statement. executequery ( sqlstring ) ; 200 } 201 202 / 203 Führt e i n Update i n d e r verbundenden Datenbank aus. 204 205 @param s q l S t r i n g Das auszuführende SQL Statement a l s S t r i n g. 206 @return Angabe über den E r f o l g des Updates 207 @throws SQLException 208 / 209 p u b l i c i n t executeupdate ( String sqlstring ) throws SQLException { 210 Statement statement = db. createstatement ( ) ; 211 return statement. executeupdate ( sqlstring ) ; 212 } 213 214 / 215 F ü l l t d i e T a b e l l e personendaten mit dem Datenbestand im PersonenArray. Vorab werden 216 d i e a l t e n T a b e l l e n i n h a l t e g e l ö s c h t. 217 218 @throws SQLException 219 / 220 p u b l i c v o i d fillpersondatabase ( ) throws SQLException { 221 Statement stmt = db. createstatement ( ) ; 222 String sqlstring = " DELETE FROM personendaten" ; 223 stmt. executeupdate ( sqlstring ) ; 224 f o r ( i n t i = 0 ; i < persons. length ; i++) { 225 sqlstring = " INSERT INTO personendaten VALUES( " 226 + persons [ i ]. getlastname ( ) + ", " 10 Julia Wolters

Freitag, 10 12 Uhr Übung WS 08 09 227 + persons [ i ]. getfirstname ( ) + ", " 228 + Integer. tostring ( persons [ i ]. getssn ( ) ) + ", " 229 + getsqldatebyjavagregoriancalendar ( persons [ i ]. getdayofbirth ( ) ) + ", " 230 + persons [ i ]. getgender ( ) + " )" ; 231 stmt. executeupdate ( sqlstring ) ; 232 } 233 } 234 235 / 236 K o n v e r t i e r t ein Objekt vom Typ ein Objekt vom Typ GregorianCalendar in 237 einen S t r i n g im SQL Date Format 238 239 @param calendar 240 @return ein S t r i n g im SQL Date Format 241 / 242 p u b l i c s t a t i c String getsqldatebyjavagregoriancalendar ( 243 GregorianCalendar calendar ) { 244 String ret ; 245 ret = calendar. get ( java. util. Calendar. YEAR ) + " " 246 + calendar. get ( java. util. Calendar. MONTH ) + " " 247 + calendar. get ( java. util. Calendar. DAY_OF_MONTH ) ; 248 return ret ; 249 } 250 251 / 252 K o n v e r t i e r t einen S t r i n g im SQL Date Format ( z.b. 1999 2 12) in ein 253 Objekt vom Typ GregorianCalendar. 254 255 @param s q l D a t e 256 ein S t r i n g im SQL Date Format 257 @return ein Objekt vom Typ GregorianCalendar. 258 / 259 p u b l i c s t a t i c GregorianCalendar getjavagreogoriancalendarebysqldate ( 260 String sqldate ) { 261 i f ( sqldate == n u l l ) r eturn new GregorianCalendar ( ) ; 262 e l s e { 263 StringTokenizer tokenizer = new StringTokenizer ( sqldate, " " ) ; 264 return new GregorianCalendar ( Integer. parseint ( tokenizer. nexttoken ( ) ), 265 Integer. parseint ( tokenizer. nexttoken ( ) ), Integer 266. parseint ( tokenizer. nexttoken ( ) ) ) ; 267 } 268 } 269 270 / Julia Wolters 11

Übung WS 08 09 Freitag, 10 12 Uhr 271 Erzeugt aus dem I n h a l t der T a b e l l e personendaten der Datenbank ein Array von Instanzen 272 der Klasse Person. Ruft extractpersonsfromresultset ( ) auf. 273 274 @ return @throws SQLException 275 / 276 p u b l i c Person [ ] extractpersonsfromdatabase ( ) throws SQLException { 277 Statement statement = db. createstatement ( ResultSet. TYPE_SCROLL_INSENSITIVE, 278 ResultSet. CONCUR_UPDATABLE ) ; 279 String sqlstring = " SELECT * FROM personendaten" ; 280 ResultSet rs = statement. executequery ( sqlstring ) ; 281 Person [ ] ret = extractpersonsfromresultset ( rs ) ; 282 return ret ; 283 } 284 285 / 286 Erzeugt aus einem ResultSet Objekt ein Array von Instanzen der Klasse 287 Person. Wird von extractpersonsfromdatabase ( ) a u f g e r u f e n. 288 289 @param rs Das ResultSet, aus dem d i e Personendaten zu e x t r a h i e r e n sind. 290 @return Ein Array von Person Objekten, das d i e e x t r a h i e r t e n Daten 291 e n t h ä l t. 292 @throws SQLException 293 / 294 p u b l i c s t a t i c Person [ ] extractpersonsfromresultset ( ResultSet rs ) 295 throws SQLException { 296 i n t count = 0 ; 297 rs. beforefirst ( ) ; 298 while (! rs. islast ( ) ) { 299 rs. next ( ) ; 300 count++; 301 } 302 Person [ ] ret = new Person [ count ] ; 303 304 rs. beforefirst ( ) ; 305 count = 1; 306 while (! rs. islast ( ) ) { 307 rs. next ( ) ; 308 count++; 309 boolean female ; 310 i f ( rs. getstring ( "gender" )!= n u l l && rs. getstring ( "gender" ). equalsignorecase ( Person. FEMALE_STRING ) ) { 311 female = true ; 312 } e l s e { 12 Julia Wolters

Freitag, 10 12 Uhr Übung WS 08 09 313 female = f a l s e ; 314 } 315 Person person = new Person ( rs. getstring ( "lastname" ), rs. getstring ( "firstname" ), rs. getint ( "ssn" ), getjavagreogoriancalendarebysqldate ( rs. getstring ( " dayofbirth " ) ), female ) ; 316 ret [ count ] = person ; 317 } 318 return ret ; 319 } 320 321 / 322 Löscht a l l e Tupel aus der T a b e l l e personendaten der Datenbank. 323 324 @throws SQLException 325 / 326 p u b l i c v o i d clearpersondatabase ( ) throws SQLException { 327 Statement stmt = db. createstatement ( ) ; 328 String sqlstring = " DELETE FROM personendaten" ; 329 stmt. executeupdate ( sqlstring ) ; 330 } 331 332 / 333 @depricated H e r s t e l l e n der Verbindung zur Datenbank und Setzen der d i e 334 Verbindung c h a r a k t i e r i s i e r e n d e n A t t r i b u t e des aufrufenden 335 O b j e k t e s 336 @param indriver 337 Der Name des T r e i b e r s. E n t s p r i c h t dem a b s o l u t e n Klassenpfad 338 der T r e i b e r k l a s s e 339 @throws ClassNotFoundException 340 f a l l s ein f a l s c h e r Treiber s p e z i f i z i e r t wurde 341 @throws SQLException 342 f a l l s beim Ansprechen der Datenbank Fehler von d i e s e r 343 gemeldet werden 344 / 345 p u b l i c void establishandconnect ( String indriver ) 346 throws ClassNotFoundException, SQLException { 347 Class. forname ( indriver ) ; 348 db = DriverManager. getconnection ( dbname, username, password ) ; 349 } 350 351 / 352 Gibt ein R e s u l t S e t in Tabellenform auf den Bildschirm aus. 353 354 @param rs Das ResultSet, das ausgegeben werden s o l l Julia Wolters 13

Übung WS 08 09 Freitag, 10 12 Uhr 355 @param numofcolumns 356 Die Anzahl der A t t r i b u t w e r t e ( d. h. S palten ) der anzuzeigenden 357 Tupel ( d. h. Z e i l e n ) 358 @throws SQLException 359 / 360 p u b l i c s t a t i c void printresultset ( ResultSet rs, i n t numofcolumns ) 361 throws SQLException { 362 rs. beforefirst ( ) ; 363 while (! rs. islast ( ) && rs. next ( ) ) { 364 f o r ( i n t i = 1 ; i <= numofcolumns ; i++) { 365 System. out. print ( rs. getstring ( i ) + " " ) ; 366 } 367 System. out. println ( ) ; 368 } 369 } 370 371 / 372 Methode z u r Ausnahmebehandlung während d e s Versuches, mit d e r Datenbank 373 zu kommunizieren. 374 375 @param s q l E x c e p t i o n Die geworfene Ausnahme 376 / 377 p r i v a t e void reactonsqlexception ( SQLException sqlexception ) { 378 boolean isfirstexception = true ; 379 while ( isfirstexception ( sqlexception. getnextexception ( )!= n u l l ) ) { 380 System. out 381. println ( " Während der Arbeit mit der Datenbank trat folgender Fehler auf: " 382 + sqlexception. tostring ( ) 383 + " Code:" 384 + sqlexception. geterrorcode ( ) ) ; 385 System. out. println ( " Die Verbindung verblieb in folgendem Status : " 386 + sqlexception. getsqlstate ( ) ) ; 387 isfirstexception = f a l s e ; 388 } 389 } 390 391 / 392 @param args 393 / 394 p u b l i c s t a t i c void main ( String args [ ] ) { 395 PersonenJDBC personenjdbc = new PersonenJDBC ( ) ; 396 // B e r e i t s t e l l e n der Eingabeparameter f ü r d i e Verbindung mit der Datenbank ; p r ü f t 14 Julia Wolters

Freitag, 10 12 Uhr Übung WS 08 09 397 // vorab, ob ein Passwort a l s Aufrufparameter übergeben wurde 398 i f ( args. length == 3) { 399 personenjdbc. dbname = args [ 0 ] ; 400 personenjdbc. username = args [ 1 ] ; 401 personenjdbc. password = args [ 2 ] ; 402 } e l s e i f ( args. length == 2) { 403 personenjdbc. dbname = args [ 0 ] ; 404 personenjdbc. username = args [ 1 ] ; 405 // F a l l s kein Passwort übergeben wurde, s e t z e das Passwort a l s l e e r e n S t r i n g 406 personenjdbc. password = "" ; 407 } e l s e { 408 // F a l l s d i e Parameteranzahl n i c h t s i n n v o l l i s t, beende das Programm 409 // mit Fehlermeldung 410 System. err 411. println ( " Benutzung: java PersonenJDBC <dbname > <dbusername > " 412 + "[< dbuserpasswd >] \n" ) ; 413 System. err 414. println ( " Beispiel: java PersonenJDBC jdbc: postgresql:// padme.uni - muenster. de/ mustermanndb mustermann}\ n" + 415 " oder java PersonenJDBC jdbc: mysql:// cpc.uni - muenster. de/ mustermanndb mustermann" ) ; 416 417 System. exit ( 1 ) ; 418 } 419 420 try { 421 i f ( personenjdbc. dbname. startswith ( "jdbc:postgresql:" ) ) { 422 System. out. println ( "Benutze PostgreSQL." ) ; 423 personenjdbc. establishandconnect ( PersonenJDBC. PSQL_DRIVER ) ; 424 } e l s e i f ( personenjdbc. dbname. startswith ( "jdbc:mysql:" ) ) { 425 System. out. println ( "Benutze MySQL." ) ; 426 personenjdbc. establishandconnect ( PersonenJDBC. MYSQL_DRIVER ) ; 427 } e l s e { 428 System. err. println ( " Unbekanntes Datenbankssystem.\ n" ) ; 429 System. exit ( 1 ) ; 430 } 431 } catch ( java. lang. ClassNotFoundException e ) { 432 System. out 433. println ( " Verbindung mit der Datenbank fehlgeschlagen: Treiber nicht gefunden. " 434 + e. tostring ( ) ) ; 435 } c a t c h ( SQLException sqlexception ) { 436 personenjdbc. reactonsqlexception ( sqlexception ) ; 437 } Julia Wolters 15

Übung WS 08 09 Freitag, 10 12 Uhr 438 439 // Führt d i e in der A u f g a b e n s t e l l u n g genannten Anforderungen aus. 440 personenjdbc. dorequiredoperations ( ) ; 441 } 442 } 16 Julia Wolters