Übung: Data Warehousing und Data Mining Sebastian Wandelt 20. Oktober 2011 wandelt@informatik.hu-berlin.de
Überblick Organisatorisches Kurze Einführung JDBC PL/SQL 1. Aufgabenblatt
Ablauf des Semesters 7 Pflichttermine (neue Aufgabe/Lösung) Heute 44./45. KW: 03./10.11.2011 46./47. KW: 17./24.11.2011 49. KW: 08.12.2011 01. KW: 05.01.2012 04. KW: 26.01.2012 07. KW: 16.02.2012 (Siegerehrung) Alle anderen Termine sind fakultativ
Ablauf eines Pflichttermins Vorstellung der Lösungen durch jede Gruppe (eine Präsentation 5-10 Minuten) Im Laufe des Semesters muss jeder Student mindestens einmal vortragen! Wer: vorher überlegen! Neues Aufgabenblatt plus eventuelle Lösungshinweise
Gruppenbildung Eine Gruppe mit 2-3 Personen Per Mail schicken Matrikelnummer und Namen der Studenten Alle Mailadressen Ansprechpartner Jede Gruppe bekommt einen Account für die Oracle-Instanz auf delphi.informatik.hu-berlin.de Passwort bekommt die Gruppe per Mail (testen!) VPN benutzen
Die Aufgaben / Wettbewerb Insgesamt gibt es 6 Aufgaben zu lösen 4 der Aufgaben sind als Wettbewerb konzipiert (Aufgaben 2, 4, 5 und 6) Es gibt (parallel zu den Scheinpunkten) Punkte für die schnellste und effizienteste Lösung Die beste Gruppe bekommt am Ende ein kleines Präsent
Kriterien für die Prüfung Alle Aufgaben (durch die Gruppe) bearbeitet Für jede Aufgabe mindestens 50% der Punkte (Mindestens) eine Lösung vorgetragen => Anmeldung zur mündlichen Prüfung
Terminfindung Alternativer Übungstermin (Vermutlich) an Stelle von Donnerstag 13 bis 15 Uhr Constraints Montag - Donnerstag 7 bis 13 Uhr Raum muss verfügbar sein(!)
Datenbankzugriff Alternativen Alles in Java machen JDBC Treiber von Oracle herunterladen Java programmieren Java-basierte GUI verwenden (z.b. Aquafold) JDBC Treiber von Oracle herunterladen Anwendung installieren Tool benutzen, die den Oracle Client verwenden (z.b. SQL*PLUS, Toad, TORA, ) Oracle Client herunterladen (Oracle Technology Network) Ca. 650 MB Installieren Dann Tool installieren
Verbindungsdaten Server: delphi.informatik.hu-berlin.de Port 1522 Instanz: orcl10 Typischer Connect-String delphi.informatik.hu-berlin.de:1522: orcl10 Für lokalen Oracle-Client Tnsnames.ora abändern Eintrag: DWH = (DESCRIPTION = ( ADDRESS = (PROTOCOL = TCP)(HOST = delphi.informatik.hu-berlin.de)(port= 1522)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl10) ) )
Zum Entwicklen / Testen Lokale Installation von Oracle 10g / 11g Express Edition
JDBC - kompakt
JDBC - Idee
JDBC - Konzepte DB-spezifischer JDBC-Treiber: DriverManager Verbindung zur DB: Interface Connection Anfragen formulieren: Statement Ergebnisse auswerten: ResultSet Metadaten über die DB
JDBC Verbindung zu Oracle //classpath um JDBC-Bibliotheken ergänzen DriverManager.registerDriver(oracle.jdbc.OracleDriver()); server= delphi.informatik.hu-berlin.de:1522:orcl10 ; Connection con = DriverManager.getConnection( jdbc:oracle:thin:@ +server, "gruppename", "kennwort");
JDBC Statements Sind gewöhnliche SQL-Statements, die JDBC an die DB weiterleitet erzeugt wird ein Statement über das Interface Connection Statement stmt=con.createstatement();
JDBC Statements Beispiele stmt.execute( "CREATE TABLE coworkers(c_idint, namevarchar(25))" ); stmt.execute( "INSERT INTO coworkers VALUES (1, 'Herbert') ); stmt.close(); //nicht vergessen!
JDBC Anfragen Ausführung von Statement.executeQuery(); Erzeugt einobjekt mit Interface ResultSet ResultSetresult=stmt.executeQuery( "SELECT c_id, name FROM coworkersorder BY c_id) ); ResultSet speichert einen internen aktuellen Pointer auf die Ergebnisliste Buffergöße! Ergebnisse werden tupelweise durchlaufen über result.next(); Bereits das erste Tupel bedarf des vorherigen Aufrufs von result.next(); Aufruf liefert true, wenn weitere Tupel vorhanden; sonst false
JDBC ResultSet Über die Methoden ResultSet.getXXX("<attrib>") also getstring(), getint(), stmt.executequery("selectc_id,name.. while(result.next()) { } intc_id= result.getint("c_id"); String name= result.getstring("name"); Man muss also den Datentypen der Spalte kennen Zugriff möglich über Metadaten (über ResultSet erhältlich)
JDBC PreparedStatements Normale SELECT Statements werden in der DB jedes Mal neu geparst, optimiert und kompliert Bei mehrfacher Ausführung eines Statements mit nur geänderten Parametern ist das ineffektiv Besser: Anstelle von Statement PreparedStatement pstmt=con.preparestatement( {LOOP} // preparetuples: pstmt.setint(1, anint); "INSERT INTO coworkers (c_id, name) VALUES (?,?) ); string as 2nd attribute: pstmt.setstring(2, astring); // executepreparedstatement pstmt.execute(); {POOL} pstmt.close();
JDBC Exceptions JDBC Methoden können SQLExceptionwerfen Abfangen! Beispiele "Geschlossene Anweisung Wo? Statement.execute() Was? Es wird auf ein Instanz von Statement zugegriffen, die zuvor mit Statement.close() geschlossen wurde "ORA-00001: Verstoß gegen Eindeutigkeit" Wo? Statement.execute("INSERT.."); Was? Einfügen bereits vorhandener Werte in eine Spalte (unique)
JDBC - Quellen Google http://www.jdbc-tutorial.com/ http://www.oracle.com/technetwork/databas e/enterprise-edition/jdbc-112010-090769.html
PL/SQL - kompakt Oracle-eigeneProgrammiersprache mit enger Integration in SQL Sämtliche prozeduralen Konzepte sind verfügbar: Funktionen/ Prozeduren, Abfragen/bedingte Ausführung, Schleifen, etc. Wird verwendet für SQL Funktionen, Trigger, Stored-Procedures, etc. Code wird in der Datenbank, uuwährend der Ausführung einer SQL- Anfrage ausgeführt Keine Benutzerschnittstellen Keine Ausgabe auf Bildschirm etc. Logging ist gar nicht so einfach (Transaktionen) Alternative: Java in der Datenbank Oder SQLJ
PL/SQL - Programme DECLARE.. /* Variablen-&Typdeklarationen */ BEGIN.. /* Programmcode, Funktionen.. */ EXCEPTION.. /* Exception-Handling*/ END;
PL/SQL - Beispiel DECLARE cntnumber; BEGIN SELECT count(*) INTO cntfrom USER_TABLES; cnt:= cnt*10; INSERT INTO mytabellevalues (cnt, constant ); END;
PL/SQL - Variablen Alle von Oracle unterstützen Typen + NUMBER, BOOLEAN Ermittlung zur Compilezeitmöglich DECLARE name VARCHAR(20); gruppe NUMBER;
PL/SQL - Sonstiges Kontrollflüsse Bedingungen, Schleifen, Ausnahmen,. Kompilieren von Programmen CREATE OR REPLACE PROCEDURE myproc IS EXEC myproc;
PL/SQL EXPLAIN PLAN EXPLAIN PLAN (FOR) SELECT * FROM user_tables; Parst und optimiert die Query, ohne sie auszuführen Speichert die Abfolge sämtlicher gewählter Operationen in einer Tabelle ab Referenzierte Tabellen Verwendete Zugriffsmethoden Join-Methode Geschätzte Kosten Pläne können durch externe Tools angezeigt werden
Zusammenfassung Bis nächsten Montag: Feste Übungstermine Übungsgruppenfestlegung (per Mail) Dienstag: Zusenden der Zugangsdaten
Fragen, Anregungen?