Teil 2 4. Vorlesung Modul: Programmierung B-PRG Grundlagen der Programmierung II Professur für Datenbanken und Informationssysteme Dr. Karsten Tolle [email protected] 1 public ArrayList <String> methode(ArrayList <String> al) { al.add("Hallo Welt!"); return al; } Aufruf mit methode(null) führt zu einer: java.lang.NullPointerException 2 Grundlagen der Programmierung II DBIS - SS2010 Exceptions (API) Throwable Exception IOException 3 Error RuntimeException Grundlagen der Programmierung II DBIS - SS2010 Exceptions - Grundlagen Es gibt außergewöhnliche Bedingungen, die es nicht gestatten im Code normal fortzufahren, z.B. wenn man auf eine Datei zugreifen möchte, die nicht existiert. Ausnahmen (Exceptions) unter Java bieten einen Mechanismus zur strukturierten, flexiblen Behandlung von Fehlern, die während der Laufzeit eines Programmes auftreten können. 4 Grundlagen der Programmierung II DBIS - SS2010 Exceptions - Fehlerarten mögliche Fehlerarten zur Laufzeit: • Eingabefehler (durch Benutzer) • Gerätefehler • physikalische Grenzen • Codefehler (z.B. ArrayIndex) 5 Grundlagen der Programmierung II DBIS - SS2010 Exceptions - Ablauf Eine Exception wurde erzeugt (vom System oder vom Entwickler) . Entweder Behandlung durch den Programmteil, in dem sie erzeugt wurde oder weitergeben. Beim Weitergeben hat nun der Empfänger die Möglichkeit sie zu behandeln oder ebenfalls weiterzugeben. Wird die Exception von keinem Programmteil behandelt, führt dies zum Abbruch des Programms (mit entsprechender Fehlermeldung)! 6 Grundlagen der Programmierung II DBIS - SS2010 Exceptions - throwing In manchen Fällen sind die Ausnahmen bereits vorgesehen. Die entsprechenden Methoden enthalten dann eine throws-Klausel. throwing = Auslösen der Ausnahme (werfen, schmeißen). Beispiel: void read() throws IOException { … throw new IOException(“Datei nicht gefunden!”); … } 7 Grundlagen der Programmierung II DBIS - SS2010 Exceptions - catching Will man solche Methoden (die Exceptions werfen) verwenden, muss die eventuelle Ausnahme abgefangen und die Behandlung implementiert werden. Alternativ kann die Exception einfach weiter gereicht werden mit throws. catching = Behandeln der Ausnahme (Abfangen und Reaktion). Beispiel: ... try { read(); } catch (IOException e) { … // im Falle einer Ausnahme } ... 8 Grundlagen der Programmierung II DBIS - SS2010 Exceptions - catching In Java übernimmt der try-catch-Block die Fehlerbehandlung. Er umgibt den Bereich, in dem der Fehler auftreten könnte. Tritt im try-Block ein Fehler auf, wird dieser sofort verlassen (alle weiteren Anweisung werden nicht ausgeführt!) und es wird in den ersten catch-Block gesprungen. Falls dieser die Exception nicht abfängt, wird weiter in den nächsten catch-Block gesprungen, usw... 9 Grundlagen der Programmierung II DBIS - SS2010 Exceptions - catching Beispiel: Mehrere catch-Blöcke (Reihenfolge beachten) try { Anweisung1; } catch (Ausnahmetyp1 ex1) { Anweisung2; } catch (Ausnahmetyp2 ex2) { Anweisung3; Ausnahmetyp1 darf nicht Oberklasse von Ausnahemtyp2 sein! } 10 Grundlagen der Programmierung II DBIS - SS2010 Exceptions - catching der finally-Block ist optional, folgt nach dem letzten catch-Block und wird immer ausgeführt !!! Insbesondere: • wenn das normale Ende des try-Blocks erreicht wurde (ohne Fehler), • wenn eine Exception aufgetreten ist, egal ob sie durch einen catch-Block behandelt wurde oder nicht, • wenn der try-Block durch break, continue oder return verlassen wurde. 11 Grundlagen der Programmierung II DBIS - SS2010 Exceptions - catching Beispiel: try-catch mit finally-Block try { … } catch (Ausnahmetyp ex) { … } finally { … } 12 Grundlagen der Programmierung II DBIS - SS2010 Exceptions - catching Der finally-Block kann verwendet werden, um Aufräumarbeiten durchzuführen! Zum Beispiel um Dateien zu schließen oder andere Ressourcen freizugeben. 13 Grundlagen der Programmierung II DBIS - SS2010 Exception Weitergabe Statt eine Exception zu behandeln, kann man sie an die aufrufende Methode weitergeben: • einfach die try-catch-Klausel weggelassen und • an den Methodenkopf die Exceptions mit throws anhängen (durch Komma getrennt), die weitergegeben werden können. 14 Grundlagen der Programmierung II DBIS - SS2010 Exception Weitergabe Beispiel: ... public void dbAusgabe() throws SQLException { ... ResultSet ergebnis = stat.executeQuery("SELECT * FROM kunden WHERE nachname='Schmidt'"); ... } 15 Grundlagen der Programmierung II DBIS - SS2010 Exception Behandlung … und dann kann die aufrufende Methode die Exception z.B. behandeln. Beispiel von vorheriger Folie: ... try { dbAusgabe(); // Ausführung von SELECT } catch (SQLException ex) { System.out.println("DB-Fehler beim Lesen!"); } ... 16 Grundlagen der Programmierung II DBIS - SS2010 Exception Klassen (API) einige wichtige Ausnahmetypen RuntimeException: • ArithmeticException (Division durch 0) • ArrayIndexOutOfBoundsException • NullPointerException IOException: • FileNotFoundException Error: • VirtualMachineError Exception: • ClassNotFoundException 17 Grundlagen der Programmierung II DBIS - SS2010 Exception Klassen (API) Für die Standard-Java-Klassen kann man in der API nachlesen, ob für eine bestimmte Methode eine Exception behandelt werden muss. Der Compiler gibt eine Fehlermeldung aus, falls eine Exception nicht behandelt wird (catch-or-throw). 18 Grundlagen der Programmierung II DBIS - SS2010 Exception Klassen (API) Ausnahmen von der catch-or-throw-Regel sind alle Klassen, die von RuntimeException erben bzw. RuntimeException selbst. Beispiel: • Gleitkommadivision durch Null • Überlauf • Mathematische Fehler Diese Exceptions können, müssen aber nicht behandelt werden! Fehler-Handling würde sonst zu umfangreich werden. 19 Grundlagen der Programmierung II DBIS - SS2010 Exception Beispiel Beispiel: Diese Methode testet, ob ein String in einen Integer umwandelbar ist. public boolean isInteger(String s){ if ( (s == null) || (s.equals("")) ) { return false; } else { try { Integer test = new Integer(s); } catch (NumberFormatException ex) { return false;} return true; } } 20 Grundlagen der Programmierung II DBIS - SS2010 Exceptions Besonderheiten Mathematische Fehler Exceptions werden nur bei ganzzahligen Typen geworfen. System.out.println("Erg: " + 2.0 / 0); // Ergebnis: Infinity // vergleiche java.lang.Float.POSITIVE_INFINITY System.out.println("Erg: " + 2 / 0); // Laufzeitfehler: ArithmeticException: by zero 21 Grundlagen der Programmierung II DBIS - SS2010 Eigene Exceptions Es ist möglich, eigene Fehlerklassen aus den vorhandenen abzuleiten. public class MyException extends IllegalArgumentException { public MyException() { super(); } public MyException(String s) { super(s); } public String getMessage() { return "Meine feste Fehlermeldung!";} } 22 Grundlagen der Programmierung II DBIS - SS2010 Exceptions– Ablauf (noch mal) Wenn eine Exception auftritt, sucht das Laufzeitsystem erst in der unmittelbaren trycatch-Anweisung, die diesen Fehler behandelt. Wird diese nicht gefunden, wird die Suche in den weiteren umgebenden Blöcken fortgesetzt. Wird auch hier nichts gefunden, wird die Exception an den Aufrufer weitergereicht falls keine Behandlung der Exception erfolgt, bricht das Programm ab. 23 Grundlagen der Programmierung II DBIS - SS2010 24 Grundlagen der Programmierung II DBIS - SS2010 Serialisieren von Objekten in Java Objekte werden von Java in einer Datei gespeichert und können wieder geladen werden. Alle relevanten Objekte müssen das Interface “java.io.Serializable” implementieren. 25 Grundlagen der Programmierung II DBIS - SS2010 Serialize - Deserialize Referenzierende Objekte werden automatisch mit gespeichert (serialize) und auch mit geleaden (deserialize). A B class A implements Serializable { private B b; public A() { b = new B(); } } 26 Grundlagen der Programmierung II DBIS - SS2010 Beispiel: Java Serialize public class Person implements Serializable { String name; ArrayList nummern = new ArrayList(); … } class PersTest { public static void main(String[] args) { … Person a = new Person(“Fred”); ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream(“filename”); os.writeObject(a); os.close; … ObjectInputStream is = new ObjectInputStream(new FileInputStream(“filename”); Person b = (Person)is.readObject(); is.close(); … } } 27 Grundlagen der Programmierung II DBIS - SS2010 CSV – Comma-Separated Values Stunde;Montag;Dienstag;Mittwoch;Donnerstag;Freitag 1;Mathe;Deutsch;Englisch;Mathe;Kunst 2;Sport;Französisch;Geschichte;Sport;Geschichte 3;Sport;"Religion ev;kath";Kunst;Deutsch;Kunst 28 Grundlagen der Programmierung II DBIS - SS2010 Strings Zeichenketten (String) • Folgen von Zeichen String s = "Hallo"; // char 'J' , String "J" String b = "Du"; System.out.println(s + b + "!!!"); // Ausgabe c:\>HalloDu!!! 29 Grundlagen der Programmierung II DBIS - SS2010 String Vergleich int a=1, b=1; String x=“abc“, y=“abc“; if(a==b) … if(x==y) … if(x.equals(y)) … 30 Sollte false sein, ist aber nicht immer sicher! Grundlagen der Programmierung II DBIS - SS2010 Strings - StringTokenizer Um eine Zeichenkette zu analysieren kann die Klasse StringTokenizer verwendet werden. Constructor Summary StringTokenizer(String str) Constructs a string tokenizer for the specified string. StringTokenizer(String str, String delim) Constructs a string tokenizer for the specified string. StringTokenizer(String str, String delim, boolean returnDelims) Constructs a string tokenizer for the specified string. 31 Grundlagen der Programmierung II DBIS - SS2010 Strings - StringTokenizer Beispiel String str ="Dies ist; ein String!"; StringTokenizer stkn; stkn = new StringTokenizer(str, ";“); while (stkn.hasMoreTokens()) { System.out.println(stkn.nextToken()); } 32 Grundlagen der Programmierung II DBIS - SS2010 Streams und Dateien Um Daten zwischen zwei oder mehreren Rechnern auszutauschen bedient man sich der Streams. Streams (Ströme) sind vergleichbar mit einem Datentunnel zwischen zwei Rechnern. „Wenn man an einem Ende etwas eingießt, kommt es am anderem Ende wieder raus (Gartenschlauch nur in eine Richtung benutzbar).“ 33 Grundlagen der Programmierung II DBIS - SS2010 Streams und Dateien Rechner A 34 Rechner B Eingang Eingang Ausgang Ausgang Grundlagen der Programmierung II DBIS - SS2010 Streams und Dateien Die obersten Streamklassen sind die abstrakten Klassen InputStream und OutputStream. Diese Klassen bieten Methoden zum Lesen bzw. Schreiben von einzelnen Bytes oder Byte Feldern. Um die Funktionalität zu erweitern, müssen die oberen Klassen erweitern werden. 35 Grundlagen der Programmierung II DBIS - SS2010 Streams und Dateien Auch Klassen zum Zugriff auf Dateien sind vorhanden: Beispiel: DataInputStream / DataOutputStream FileInputStream / FileOutputStream FileWriter / FileReader zum Lesen oder Schreiben von Textdateien 36 Grundlagen der Programmierung II DBIS - SS2010 Streams und Dateien – Bsp. … File file = new File("test.txt"); try { FileWriter fw = new FileWriter(file); fw.write("Hallo Welt"); fw.flush(); } catch (Exception ex) { ex.printStackTrace(); } … 37 Grundlagen der Programmierung II DBIS - SS2010 Kompaktes Lesen (seit Java 5) java.util.Scanner public void readFile(String filename) { try { Scanner scanner = new Scanner(new File(filename)); while (scanner.hasNextLine()){ String str = scanner.nextLine(); .. } } catch (Exception e) { e.printStackTrace(); } } 38 Grundlagen der Programmierung II DBIS - SS2010 Tabellenkalkulationsprogramme • einfache Datenlisten (Tabellen) • man kann einfach Diagramme erstellen, • zum Austausch von Daten (CSV), • um automatische Kalkulationen durchzuführen, • … DBIS - SS2010 DBS / DBMS / DB Was ist das? Wann braucht man so etwas? 40 Grundlagen der Programmierung II DBIS - SS2010 41 Grundlagen der Programmierung II DBIS - SS2010 Vorteile DBS Redundanz und Inkonsistenz Werden durch die zentrale Datenverwaltung und Datenhaltung vermieden. Beschränkung der Zugriffsmöglichkeiten Durch verschiedene Konzepte können Informationen miteinander verknüpft werden (z.B. relationales Modell). Eingeschränkter Mehrbenutzerbetrieb Durch die zentrale Benutzerverwaltung einfach zu realisieren. Integritätsverletzungen Durch Constraints in der zentralen Datenverwaltung gut umzusetzen. Sicherheitsprobleme Durch die zentrale Benutzerverwaltung können Zugriffsrechte gut kontrolliert werden. 42 Grundlagen der Programmierung II DBIS - SS2010 weitere Vorteile von DBS Physische Datenunabhängigkeit: Anwendungen von Modifikationen an der physischen Speicherstruktur nicht betroffen. Logische Datenunabhängigkeit: Änderungen an der logischen Datenstruktur beeinflussen Anwendungen nicht umbedingt. Dauerhafte Speicherung von großen Datenbeständen. Bereitstellung einer Anfragesprache zum einfachen Umgang mit der Datenbank. Sicherheit gegenüber Hard- und Softwareausfällen (Recovery). Effizient, möglichst schnell unter Benutzung weniger Ressourcen. 43 Grundlagen der Programmierung II DBIS - SS2010 Fragen um herauszufinden, ob man ein DBMS benötigt: 1. Liegt eine große Datenmenge vor, die schwer zu managen ist? • • Braucht es lange das Dokument zu öffnen? Ist das Betrachten der Daten ist schwierig, muss man viel scrollen und ist es scher die gesuchten Daten zu finden? 2. Arbeiten verschiedene Personen/Anwendungen mit den Daten? 3. Gibt es weitere Daten, die mit den gegebenen Daten in Relation stehen und ebenfalls gespeichert werden? • Ziehen Änderungen an einer Stellen Änderungen an anderen Stellen nach sich? 4. Werden die gleichen Daten an unterschiedlichen Orten verwendet? DBIS - SS2010 Wichtige Datenbanken • Oracle • IBM DB2 • SQL Server Company Revenue 2007 Market share 2007 Oracle 8,343 Mrd. Dollar 37,6% IBM 4,879 Mrd. Dollar 22,0% Microsoft 4,670 Mrd. Dollar 21,0% • … • MySQL • PostgreSQL aus Computerwoche Nr. 3 vom 16. Januar 2009 • Caché … 45 Grundlagen der Programmierung II DBIS - SS2010 Arten von DBMS - Datenbankmodelle hierarchisch: Die Datenobjekte stehen in verdrahteten Eltern-Kind Beziehungen zueinander. netzwerkartig: Die Datenobjekte werden miteinander in Netzen verdrahtet. Werden hier nicht behandelt! DBIS - SS2010 Arten von DBMS - Datenbankmodelle relational: Die Datenobjekte stehen in flachen Tabellen, Beziehungen ergeben sich aus Werten der Tabellenspalten RDBMS. objektorientiert: Die Datenobjekte werden miteinander verdrahtet, sind gegebenenfalls miteinander verwandt und können vom System immer eindeutig identifiziert werden OODBMS. Es existiert eine Vielzahl von Misch- und Nebenformen, wie zum Beispiel das objektrelationale Modell ORDBMS. DBIS - SS2010 Besondere DBS XML Datenbanken (Tamino, eXist, …) Geoinformationssysteme ≡ Geographic Information System (GIS) / Spatial Databases NoSQL (Not Only SQL Datenbanken) … momentan heiß diskutiert. 48 Grundlagen der Programmierung II DBIS - SS2010 Erste Schritte … Was sind die Anforderungen? Was sind die Ziele? Ist bekannt was gespeichert werden soll? Design des Datenmodels DBIS - SS2010 Design Im Englischen und Französischen bedeutet design „Gestaltung“ oder „Entwurf“, … deutschen Sprachgebrauch, der eher auf formal/künstlerische Aspekte abzielt und den Designbegriff weitgehend verdinglicht, umfasst der angelsächsische Begriff design auch technisch-konstruktive Anteile der „Gestaltung“. aus Wikipedia: Design applied arts and engineering DBIS - SS2010 Entity-Relationship-Modell Zur Beschreibung der realen Welt! DBIS - SS2010 (E)ER Modell Siehe auch: C. Maria Keet: A formal comparison of conceptual datamodeling languages (http://ftp.informatik.rwth-aachen.de/Publications/CEURWS/Vol-337/paper3.pdf) Picture by: Frank Roeing DBIS - SS2010