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