11. JDBC. Ziel: Verständnis für Konzepte von JDBC aufbauen. Prof. Dr. Stephan Kleuker. Datenbanken

Größe: px
Ab Seite anzeigen:

Download "11. JDBC. Ziel: Verständnis für Konzepte von JDBC aufbauen. Prof. Dr. Stephan Kleuker. Datenbanken"

Transkript

1 11. JDBC Grundsätzliche Nutzung von JDBC Verbindungsaufbau Anfragen Analyse des erhaltenen Ergebnisses Veränderungen des Ergebnisses Einführung JUnit Einführung DBUnit Ziel: Verständnis für Konzepte von JDBC aufbauen 276

2 Überblick: Datenbankanfragen mit JDBC Datenbankverbindung herstellen class DriverManager Connection con= DriverManager.getConnection(...); Statement stmt= con.createstatement(); Datenbankanfrage ResultSet rs = stmt.executequery(...); Ergebnisse verarbeiten Verbindung zur DB schließen rs.next(); int n = rs.getint("knr"); con.close(); 277

3 Verbindungsaufbau mit einer Datenbank Laden des Datenbanktreibers DriverManager.registerDriver( new oracle.jdbc.driver.oracledriver()); Aufbau einer Verbindung Connection con = DriverManager.getConnection ("jdbc:postgresql://rechner:5712/eshop","user", "password"); JDBC-URL identifiziert Datenbank Aufbau: jdbc:subprotocol:subname Treibermanager übergibt JDBC-URL der Reihe nach an registrierte Treiber Driver.acceptsURL(String url) liefert true, falls der Treiber den String akzeptiert 278

4 Auslesen der Oracle-Verbindungsdaten Oracle versteckt irgendwo Verbindungsdaten in tnsnames.ora benötigt wird IP-Adresse, Port (default 1521), Name der DB- Instanz (z. B. in SID) + Nutzername und Passwort Daraus abgeleiteter Connection-String für HS-DB (SID: Ora11) Connection con = DriverManager.getConnection( "jdbc:oracle:thin:" + "@oracle-srv.edvsz.hs-osnabrueck.de" + ":1521:Ora11", "username", "passwort"); Connection-String für DB auf lokalem Rechner (Oracle XE) Connection con = DriverManager.getConnection( "jdbc:oracle:thin:@localhost:1521:xe", "username", "passwort"); 279

5 Connection Ergebnis von DriverManager.getConnection() ist eine Connection con (oder eine SQLException) Connection ist Verbindung zur Datenbank Connection ist teure Ressource: Aufbau der Verbindung kostet viel Zeit Anzahl gleichzeitiger Verbindungen häufig beschränkt Wichtigste Aufgaben: Erzeugen von Statement-Objekten Beschreibungen von Datenbank und DBMS erfragen Transaktionen handhaben 280

6 Verbindungsanalyse durch Metadaten (Ausschnitt) DatabaseMetaData dbmd = con.getmetadata(); System.out.println("DB-Name: " + dbmd.getdatabaseproductname() + "\ndb-version: " + dbmd.getdatabasemajorversion() + "\ndb-release: " + dbmd.getdriverminorversion() + "\ntransaktionen erlaubt: " + dbmd.supportstransactions() + "\nbeachtet GroßKlein :" + dbmd.storesmixedcaseidentifiers() + "\nunterstützt UNION :" + dbmd.supportsunion() + "\nmax. Prozedurname: " + dbmd.getmaxprocedurenamelength()); DB-Name: Oracle DB-Version: 11 DB-Release: 2 Transaktionen erlaubt: true beachtet GroßKlein :false unterstützt UNION :true max. Prozedurname:

7 Statement / Anfrage ausführen Statement stmt = con.createstatement(); Wird immer aus bestehender Connection erzeugt Aufgabe: Ausführen einer SQL-Anweisung über die Connection Mehrere parallele Statements pro Connection möglich SELECT-Anweisung ausführen: ResultSet rs = stmt.executequery("select * FROM Kunde"); Daten ändern: int updates = stmt.executeupdate("delete FROM Kunde..."); 282

8 Metadaten des Anfrageergebnisses ResultSet rs = stmt.executequery("select * FROM Continent"); ResultSetMetaData rsmd = rs.getmetadata(); int spalten = rsmd.getcolumncount(); for (int i = 1; i <= spalten; i++) { // nicht i=0 System.out.println(i + ". Name: " + rsmd.getcolumnname(i) + " Typ: " + rsmd.getcolumntypename(i) + " Javatyp: " + rsmd.getcolumnclassname(i)); 1. Name: NAME Typ: VARCHAR2 Javatyp: java.lang.string 2. Name: AREA Typ: NUMBER Javatyp: java.math.bigdecimal 283

9 Analyse von ResultSet ResultSet rs = stmt.executequery("select * FROM Kunde"); Ergebnis einer Selektionsanweisung: Tabelle ResultSet enthält einen Datensatz-Zeiger (Cursor) zum Durchlauf der Tabelle Voreinstellung: sequenziell und lesend ab JDBC 2: nichtsequenzielle und aktualisierbare ResultSets Zeiger steht initial vor der ersten Tabellenzeile rs.next() positioniert zur nächsten Zeile, liefert false, falls bereits auf letzter Zeile 284

10 Attributwerte auslesen (1/2) Spaltenwerte (Attribute) einer Zeile mit getxxx()-methoden lesen Treiber konvertiert Daten, falls möglich, deshalb (fast) immer getstring() nutzbar Beispiel: Lesen einer ganzen Zahl in DB-Spalte kundennr: int n = rs.getint("kundennr"); Effizientere Methode, falls Spaltenindex bekannt: int n = rs.getint(4); Spaltenindex zum Spaltennamen finden int findcolumn(string columnname) Strategie: Spaltenindex einmalig ermitteln und merken, Werte danach immer über den Index abrufen 285

11 Attributwerte auslesen (2/2) Methode getobject() Liest jeden beliebigen SQL-Datentyp Liefert Ergebnis als entsprechenden Java-Typ Nullwerte Spalte kann leere Zellen enthalten (Nullwert, SQL-NULL) Bei leerer Zelle liefert getint() ebenfalls das Ergebnis 0 Unterscheidung zu echter 0 möglich durch wasnull() true, falls zuletzt mit getxxx() gelesene Zelle SQL- NULL enthielt false sonst 286

12 Beispiel: Ausgabe eines Anfrageergebnisses ResultSet rs = stmt.executequery("select * FROM Continent"); ResultSetMetaData rsmd = rs.getmetadata(); int spalten = rsmd.getcolumncount(); while (rs.next()) { for (int i = 1; i <= spalten; i++) { System.out.print(rs.getString(i) + " "); System.out.print("\n"); Europe Asia Australia/Oceania Africa America

13 ResultSet: positionieren und ändern Statement createstatement(int resultsettype, int resultsetconcurrency) Parameter (ResultSet-Konstanten) ermöglichen beliebiges Positionieren (Scrolling) und Ändern der Datensätze TYPE_FORWARD_ONLY: sequentieller Durchlauf TYPE_SCROLL_INSENSITIVE: positionierbar, Änderungen an Datenbank werden nicht bemerkt TYPE_SCROLL_SENSITIVE: positionierbar, Änderungen an Datenbank werden bemerkt CONCUR_READ_ONLY: nur lesen CONCUR_UPDATABLE: Änderungen möglich 288

14 ResultSet: positionieren (1/3) void beforefirst() Positioniert vor den ersten Satz boolean first() Positioniert auf den ersten Satz boolean last() Positioniert auf den letzten Satz void afterlast() Positioniert hinter den letzten Satz 289

15 ResultSet: positionieren (2/3) boolean absolute(int pos) Positioniert ausgehend vom Anfang (pos positiv) oder vom Ende (pos negativ) boolean relative(int rows) Positioniert relativ zum aktuellen Satz vorwärts (rows positiv) oder rückwärts (rows negativ) boolean next() Positioniert auf den nächsten Satz boolean previous() Positioniert auf den vorigen Satz 290

16 ResultSet: positionieren (3/3) int getrow() Liefert aktuelle Satznummer boolean isbeforefirst() Liefert true, falls vor dem ersten Satz boolean isfirst() Liefert true, falls auf dem ersten Satz boolean islast() Liefert true, falls auf dem letzten Satz boolean isafterlast() Liefert true, falls hinter dem letzten Satz 291

17 ResultSet: Datensatz ändern Methoden updatexxx() ändern Werte in aktueller Zeile. rs.absolute(5); rs.updatestring("name", "Heinz"); rs.updateint(2, 42); rs.updatenull(3); rs.updaterow(); void updaterow() Schreibt geänderte Zeile in die Datenbank (*) void cancelrowupdates() Macht Änderungen rückgängig nur vor updaterow() void deleterow() Löscht aktuelle Zeile aus ResultSet (*) Ob Bearbeitung des ResultSet sich direkt auf die Datenbank auswirkt, hängt von Autocommit-Einstellung ab [später] 292

18 ResultSet: Datensatz einfügen Einfügezeile: im ResultSet, nicht in der Datenbank rs.movetoinsertrow(); rs.updatestring("name", "Callaghan"); rs.updateint(2, 42); rs.insertrow(); rs.movetocurrentrow(); void movetoinsertrow() Positioniert auf die Einfügezeile void insertrow() Schreibt Einfügezeile in ResultSet und Datenbank (abhängig von Autocommit-Einstellung) void movetocurrentrow() Positioniert von der Einfügezeile auf die aktuelle Zeile im ResultSet 293

19 Daten ändern ResultSet executequery(string) führt SELECT- Anweisung aus int executeupdate(string) führt INSERT-, UPDATEoder DELETE-Anweisung aus Liefert Anzahl betroffener Zeilen (Update count) Auch für sonstige Befehle (CREATE...) geeignet boolean execute(string) führt beliebige SQL- Anweisung aus Liefert true, falls Ergebnis ein ResultSet ist, dann mit getresultset() Ergebnis abrufbar Liefert false, falls Ergebnis ein Update count ist 294

20 PreparedStatement (1/2) PreparedStatement Objekt enthält vorübersetzte SQL- Befehle geeignet, wenn Statement mehr als einmal ausgeführt werden muss PreparedStatement kann Variablen enthalten, die jedesmal bei Ausführung definiert werden Ansatz: Erzeuge PreparedStatement, identifiziere Variablen mit? PreparedStatement pstmt = con.preparestatement ("UPDATE Kunde " + "SET Status =? where Umsatz >?"); 295

21 PreparedStatement (2/2) 1. Variablen-Werte übergeben pstmt.setxxx(index,value); 2. Statement ausführen pstmt.executequery(); pstmt.executeupdate(); int goldenerkunde=42000; PreparedStatement pstmt = con.preparestatement ("UPDATE Kunde " + "SET Status =? where Umsatz >?"); pstmt.setstring(1, "Gold"); pstmt.setint(2, goldenerkunde); pstmt.executeupdate(); 296

22 COMMIT Für Connection con ist automatisch ein Auto-COMMIT eingestellt, alle Aktionen direkt auf der Datenbank Mit con.setautocommit(boolean) einstellbar Starteinstellung über con.getautocommit() ermitteln (bei Oracle default: true!) con.commit() zum erfolgreichen Abschließen con.rollback() zum Verwerfen der Änderungen seit dem letzten Commit 297

23 Verbindungsaufbau (Ausschnitt) import oracle.jdbc.*; // besser ausschreiben import java.sql.*;... try { // Oracle JDBC-Treiber laden DriverManager. registerdriver(new oracle.jdbc.driver.oracledriver()); Connection con = DriverManager. getconnection("jdbc:oracle:thin:@oracle-srv.edvsz" +".hs-osnabrueck.de:1521:ora11", "kleuker", "passwort"); // Oracle DatabaseMetaData fuer Meta-Informationen DatabaseMetaData meta = con.getmetadata(); // Beispielmetainformation: Treiberversion System.out.println("JDBC driver version is "+ meta.getdriverversion()+"\n"); befehl=con.createstatement(); //private Statement befehl catch (SQLException e) {

24 Einfache Verbindungsnutzung (Ausschnitt) ResultSet result; ResultSetMetaData metaresult; try { result=befehl.executequery("select * FROM City"); metaresult=result.getmetadata(); int spalten = metaresult.getcolumncount(); while(result.next()){ for(int i=1; i<=spalten;i++) ausgabe.append(result.getstring(i)+" "); ausgabe.append("\n"); ausgabe.append("bearbeitung abgeschlossen\n"); result.close(); catch (SQLException es) { while (es!=null){ //evtl. mehr als eine Exception fehler.append("fehlercode: "+es.geterrorcode()+"\n"); fehler.append("sql State: "+es.getsqlstate()+"\n"); fehler.append(es+"\n"); es= es.getnextexception(); 299

25 Einbindung von Oracle-JDBC in Eclipse Rechtsklick auf Projekt, dann Properies wählen, Java Build Path, dann Reiter Libraries, dann Add External JARs... Quellen: Oracle Web-Seiten C:\sqldeveloper\jdbc\lib\ojdbc6.jar Dann passenden Treiber suchen, z. B. ojdbc6.jar in sqldeveloper\jdbc\lib 300

26 Einbindung von Oracle-JDBC in NetBeans Rechtsklick im Projekt auf Libraries -> Add JAR/Folder manövrieren zum Verzeichnis mit JDBC-Treiber (sinnvoll Unterordner lib des Projekts) markieren und Öffnen 301

27 Erinnerung: PL/SQL-Funktion CREATE OR REPLACE FUNCTION anzahlnasen(namepar Angestellte.Name%TYPE) RETURN INTEGER /* oder NUMBER */ IS ergebnis INTEGER; BEGIN IF namepar = 'Meier' THEN RAISE_APPLICATION_ERROR(-20300, 'Meiers nicht zählbar'); END IF; SELECT COUNT(*) INTO ergebnis FROM Angestellte WHERE Angestellte.Name=namePar; RETURN ergebnis; END; 302

28 PL/SQL in Java Grundsätzlich besteht bei der Ausführung große Ähnlichkeit zu PreparedStatements benötigt wird Connection-Objekt con CallableStatement stmt=con.preparecall( "{? = call anzahlnasen(?)"); man beachte geschweifte Klammern, bei Prozeduraufruf wird? = am Anfang weggelassen in Oracle auch möglich: CallableStatement stmt=con.preparecall( "BEGIN? := anzahlnasen(?); END;"); Ausgabeparameter müssen registriert werden stmt.registeroutparameter(1,types.integer); 303

29 Beispiel public int nasenzaehlen(string nachname){ int ergebnis = 0; try { CallableStatement stmt=con.preparecall( "{? = call anzahlnasen(?)"); stmt.registeroutparameter(1, Types.INTEGER); stmt.setstring(2, nachname); stmt.execute(); ergebnis=stmt.getint(1); catch (SQLException e) { if(e.geterrorcode() == 20300) // von RAISE_APPLICATION_ERROR ergebnis = -1; else{ ausnahmeausgeben(e); ergebnis = Integer.MIN_VALUE; return ergebnis; 304

30 Nutzung von Cursor als Ergebnis (1/3) import java.sql.callablestatement; import java.sql.connection; import java.sql.drivermanager; import java.sql.resultset; import java.util.scanner; import oracle.jdbc.oracletypes; /* in Oracle fuer das MondialBeispiel CREATE OR REPLACE PROCEDURE STAEDTEIN( Land IN VARCHAR, stadtcursor IN OUT SYS_REFCURSOR) AS BEGIN OPEN stadtcursor for SELECT * FROM City WHERE City.Country=Land; END STAEDTEIN; */ /* Hinweis: Cursor nur lesbar, nicht schreibbar! */ 305

31 Nutzung von Cursor als Ergebnis (2/3) public class PLSQLCursorNutzungInJava { // public static void main(string[] s){ String nutzer = "kleuker"; String passwort = "kleuker"; try { DriverManager.registerDriver(new oracle.jdbc.driver.oracledriver()); //Verbindung aufbauen in der HS zur DB Connection conn = DriverManager.getConnection ("jdbc:oracle:thin:@oracle-srv.edvsz.hs-osna" + "brueck.de:1521:ora11", nutzer, passwort); //Vorbereitung der PL/SQL-Nutzung ResultSet rset = null; CallableStatement cstmt = conn. preparecall("{call staedtein(?,?)"); cstmt.registeroutparameter(2, OracleTypes.CURSOR); 306

32 Nutzung von Cursor als Ergebnis (3/3) //Testprogramm String eingabe = ""; while(!eingabe.equalsignorecase("ende")){ System.out.print( "Laenderkuerzel (Ende mit \"Ende\"): "); eingabe=(new Scanner(System.in)).next(); cstmt.setstring(1,eingabe); cstmt.execute(); rset = (ResultSet) cstmt.getobject(2); while(rset.next()) System.out.println("Stadt: " +rset.getstring("name") +" Einwohner:" +rset.getint("population")); conn.close(); catch(exception e){ // ausarbeiten, wie immer 307

33 Beispieldialog Laenderkuerzel (Ende mit "Ende"): GR Stadt: Piraeus Einwohner: Stadt: Patrai Einwohner: Stadt: Larisa Einwohner: Stadt: Iraklion Einwohner: Stadt: Volos Einwohner:71378 Stadt: Kavalla Einwohner:56705 Stadt: Athens Einwohner: Stadt: Thessaloniki Einwohner: Laenderkuerzel (Ende mit "Ende"): LAR Stadt: Tripoli Einwohner:0 Stadt: Bengasi Einwohner:0 Laenderkuerzel (Ende mit "Ende"): AND Stadt: Andorra la Vella Einwohner:15600 Laenderkuerzel (Ende mit "Ende"): ende 308

34 Einschub: Testen mit JUnit Framework, um den Unit-Test eines Java-Programms zu automatisieren einfacher Aufbau leicht erlernbar geht auf SUnit (Smalltalk) zurück mittlerweile für viele Sprachen verfügbar (NUnit, CPPUnit) S. Kleuker, Qualitätssicherung durch Softwaretests, Springer Vieweg, Wiesbaden, 2013 Software-Qualität 309

35 Testfall Vor dem Testen müssen Testfälle spezifiziert werden Vorbedingungen Zu testende Software in klar definierte Ausgangslage bringen (z. B. Objekte mit zu testenden Methoden erzeugen) Angeschlossene Systeme in definierten Zustand bringen Weitere Rahmenbedingungen sichern (z. B. HW) Ausführung Was muss wann gemacht werden (einfachster Fall: Methodenaufruf) Nachbedingungen Welche Ergebnisse sollen vorliegen (einfachster Fall: Rückgabewerte) Zustände anderer Objekte / angeschlossener Systeme Software-Qualität 310

36 Aufbau einer Testklasse (1/8) import junit.framework.assert; import org.junit.after; import org.junit.afterclass; import org.junit.before; import org.junit.beforeclass; import org.junit.test; public class AnschauungTest { private int wert; private static int klasse; Beliebiger Klassenname, Endung Test üblich Nutzung von normalen Exemplarvariablen Klassenvariablen, außer als Konstanten, unüblich Komponentenbasierte Software- Entwicklung 311

37 Aufbau einer Testklasse (2/8) Verhaltensbeschreibung mit public static void setupbeforeclass() throws Exception { System.out.println("setUpBeforeClass"); klasse = public static void teardownafterclass() throws Exception { System.out.println("tearDownAfterClass"); Methode wird einmal vor vor allen Tests ausgeführt, z.b. Aufbau DB-Verbindung einmal nach allen Tests (aufräumen) Komponentenbasierte Software- Entwicklung 312

38 Aufbau einer Testklasse public void setup() throws Exception { System.out.println("setUp"); wert = 42; klasse = klasse + 1; System.out.println("klasse ist public void teardown() throws Exception { System.out.println("tearDown"); Methode wird vor jedem Test ausgeführt, Idee: einheitliche Ausgangssituation schaffen einmal nach jeden Tests (lokal aufräumen) Komponentenbasierte Software- Entwicklung 313

39 Aufbau einer Testklasse public void test1() { Test ist beliebige annotierte Methode Methodenname ist beliebig, beginnt typischerweise mit test und beinhaltet Name der Methode oder Sinn des Tests System.out.println("test1"); wert = wert + 1; Assert.assertTrue("Erwartet 43 gefunden: "+wert, wert == 43); Experimente Prüfmethode, Parameter Text und Boolesche Bedingung; ist Bedingung false wird Test als gescheitert festgehalten und Text ausgegeben Komponentenbasierte Software- Entwicklung 314

40 Aufbau einer Testklasse public void test2() { System.out.println("test2"); wert = wert + 2; Assert.assertTrue(wert == public void test3() { System.out.println("test3"); wert = wert + 3; Assert.assertTrue("Erwartet 44 gefunden: "+wert, wert == 44); Kurzform ohne Text (gibt assert-varianten) wenn Testfall scheitert ist entweder das Programm oder der Test fehlerhaft Komponentenbasierte Software- Entwicklung 315

41 Aufbau einer Testklasse public void test4() { System.out.println("test4"); try{ if(42/0 == 0){ Assert.fail(); catch(arithmeticexception e){ catch(exception e){ public void test5() { System.out.println("test5"); throw new IllegalArgumentException(); Test scheitert, wenn ausgeführt; markiert Stellen, die nicht erreicht werden sollen gewünschte Exception ungewünschte Exception (kann weggelassen werden) Komponentenbasierte Software- Entwicklung 316

42 Aufbau einer Testklasse (7/8) setupbeforeclass setup klasse ist 100 test4 teardown setup klasse ist 101 test5 teardown setup klasse ist 102 test1 teardown setup klasse ist 103 test2 teardown setup klasse ist 104 test3 teardown teardownafterclass Komponentenbasierte Software- Entwicklung 317

43 Aufbau einer Testklasse (8/8) Failure: Fehler durch Assert Error: Fehler durch Abbruch Komponentenbasierte Software- Entwicklung 318

44 Erinnerung: Ich muss mein Gebot erhoehen CREATE OR REPLACE TRIGGER GEBOTERHOEHEN BEFORE INSERT OR UPDATE ON GEBOT FOR EACH ROW DECLARE PRAGMA AUTONOMOUS_TRANSACTION; maxi Gebot.gebot%TYPE; BEGIN SELECT MAX (Gebot.gebot) INTO maxi FROM Gebot WHERE Gebot.mnr = :NEW.mnr AND Gebot.ware = :NEW.ware; IF maxi IS NOT NULL AND maxi >= :NEW.Gebot THEN RAISE_APPLICATION_ERROR(-20900,'Gebot muss erhoeht werden'); END IF; END; / CREATE TABLE Gebot( mnr INTEGER, ware INTEGER, gebot NUMBER(8, 2), PRIMARY KEY(mnr,ware,gebot) ); 319

45 Basisideen zur Testerstellung viele kleine Tests, da nachfolgende Asserts nicht geprüft, wenn eines vorher abbricht erwartetes Verhalten kann zusammen geprüft werden jede mögliche Ausnahme in getrenntem Testfall Extremwerte prüfen Testklassen können weitere Hilfsmethoden enthalten typisch: am Anfang auf leerem Feld neue Testausgangssituation erstellen 320

46 Test von Nie, nie mit laufender Geschäftsdatenbank testen; es wird immer ein Testsystem benötigt generell direkt mit JUnit machbar Detailproblem: nach den Tests so aufräumen, dass Ausgangssituation wieder hergestellt (abhängige Daten!) Detailproblem: aufwändiger Vergleich zwischen aktuellem und erwartetem Tabelleninhalt Vereinfachung mit DBUnit als Ergänzung von JUnit einfaches Leeren und Neueinspielen von Datensätzen einfacher Vergleich von Mengen von Tabelleneinträgen Tabellen z. B. auf Basis von XML-Dateien definierbar (hier nur zentrale Konzepte) 321

47 Projektaufbau 322

48 Konfiguration des Loggers (log4j.properties) log4j.rootlogger=warn, console log4j.appender.console=org.apache.log4j.consoleappender log4j.appender.console.layout=org.apache.log4j.patternlayout log4j.appender.console.layout.conversionpattern=%5p [%t] (%F:%L) - %m%n ermöglicht flexibles Schreiben von Meldungen in Log- Dateien sehr einfach ein- und ausschaltbar (hier Level WARN) 323

49 Verbindung public class Verbindung { private static String dbadresse = " "; private static String dbinstanz = "XE"; private static String nutzer = "ich"; private static String passwort = "ich"; public static Connection verbinden() throws Exception { DriverManager.registerDriver( new oracle.jdbc.driver.oracledriver()); return DriverManager.getConnection("jdbc:oracle:thin:@" + dbadresse + ":1521:" + dbinstanz, nutzer, passwort); public static void verbindungtrennen(connection con, IDatabaseConnection condbu) throws Exception { if (con!= null) { con.close(); if (condbu!= null) { condbu.close(); 324

50 public class GebotErhoehenTest { private static Connection con = null; // direkte DB-Verbindung private static IDatabaseConnection condbu; // public static void setupbeforeclass() throws Exception { con = Verbindung.verbinden(); condbu = new DatabaseConnection(con, null, true); DatabaseConfig config = condbu.getconfig(); config.setproperty(databaseconfig.property_datatype_factory, new public static void teardownafterclass() throws Exception { Verbindung.verbindungTrennen(con, condbu); DBUnit hat DBindividuelle Einstellungen 325

51 basisdaten.xml Möglichkeit zur Spezifikation von Testdaten mit XML <?xml version="1.0" encoding="utf-8"?> <dataset> <Gebot mnr="1" ware="100" gebot="1.00" /> <Gebot mnr="1" ware="101" gebot="1.00" /> <Gebot mnr="1" ware="100" gebot="2.00" /> <Gebot mnr="2" ware="100" gebot="2.01" /> <Gebot mnr="3" ware="101" gebot="1.01" /> </dataset> Wird Spalte nicht angegeben, dann NULL-Wert Daten werden in angegebener Reihenfolge eingefügt 326

52 Varianten beim Einspielen von public void setup() throws Exception { IDataSet dataset = new FlatXmlDataSetBuilder().build(new FileInputStream(".\\testdaten\\basisdaten.xml")); DatabaseOperation.CLEAN_INSERT.execute(conDBU, dataset); CLEAN_INSERT: alle Daten zuerst löschen, dann einfügen DELETE_ALL: löscht alle Daten in den Tabellen DELETE : löscht die übergebenen Daten INSERT: fügt die übergebenen Daten in die Tabellen ein UPDATE: aktualisiert die vorhandenen Daten mit den übergebenen Daten REFRESH: aktualisiert vorhandene Daten, fügt nicht vorhandene Daten hinzu 327

53 Test: erlaubtes public void testgebotaufneuewareok() { try { int anzahl = con.createstatement().executeupdate( "INSERT INTO Gebot VALUES (4, 102, 3.00)"); Assert.assertTrue("statt 1, " + anzahl + "Datensaetze geaendert", anzahl == 1); catch (SQLException e) { Assert.fail("erlaubtes INSERT gescheitert: " + "VALUES (4, 102, 3.00)"); // Hinweis: Test mit erlaubten UPDATE, DELETE sinnvoll Etwas kritisch: es wurde eine Zeile eingefügt; wird nicht überprüft, ob sie so im Ergebnis steht 328

54 Erlaubtes Insert, präzise Prüfung (1/2) einfachesinsert.xml <?xml version="1.0" encoding="utf-8"?> <dataset> <Gebot mnr="1" ware="100" gebot="1.00" /> <Gebot mnr="1" ware="101" gebot="1.00" /> <Gebot mnr="1" ware="100" gebot="2.00" /> <Gebot mnr="4" ware="102" gebot="3.00" /> <Gebot mnr="2" ware="100" gebot="2.01" /> <Gebot mnr="3" ware="101" gebot="1.01" /> </dataset> Erinnerung: SQL speichert ohne Reihenfolge, was beim Vergleich zu beachten ist DBUnit ermöglicht lexikographische Sortierung 329

55 Erlaubtes Insert, präzise Prüfung public void testgebotaufneuewarevarianteok() throws Exception { con.createstatement().executeupdate( "INSERT INTO Gebot VALUES (4,102,3.00)"); IDataSet databasedataset = condbu.createdataset(); ITable actualtable = databasedataset.gettable("gebot"); IDataSet expecteddataset = new FlatXmlDataSetBuilder().build(new File(".\\testdaten\\einfachesInsert.xml")); ITable expectedtable = expecteddataset.gettable("gebot"); Assertion.assertEquals(new SortedTable(expectedTable), new SortedTable(actualTable)); 330

56 Test, ob Primary Key noch public void testprimarykeyverstoss(){ try { con.createstatement().executeupdate( "INSERT INTO Gebot VALUES (2,100,2.01)"); Assert.fail("verbotenes INSERT durchgefuehrt: " + "VALUES (2,100,2.01)"); catch (SQLException e) { 331

57 Test des Triggers public void testhoeheresgebotok() { try { int anzahl = con.createstatement().executeupdate( "INSERT INTO Gebot VALUES (3, 101, 1.02)"); Assert.assertTrue("statt 1, " + anzahl + "Datensaetze geaendert", anzahl == 1); catch (SQLException e) { Assert.fail("erlaubtes INSERT gescheitert: " + "VALUES (3, 101, 1.02)"); 332

58 Test des Triggers public void testgleichesgebotverboten(){ try { con.createstatement().executeupdate( "INSERT INTO Gebot VALUES (3, 101, 1.00)"); Assert.fail("verbotenes INSERT durchgefuehrt: " + "VALUES (3, 101, 1.00)"); catch (SQLException e) { Assert.assertTrue("Fehler erwartet, gefunden" + e.geterrorcode(), e.geterrorcode() == 20900); // fehlen Tests für UPDATE Test auf passsenden Fehlercode 333

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

Ziel: Verständnis für Konzepte von JDBC aufbauen 11. JDBC Grundsätzliche Nutzung von JDBC Verbindungsaufbau Anfragen Analyse des erhaltenen Ergebnisses Veränderungen des Ergebnisses Ziel: Verständnis für Konzepte von JDBC aufbauen 253 Überblick: Datenbankanfragen

Mehr

11. JDBC. Grundsätzliche Nutzung von JDBC Verbindungsaufbau Anfragen Analyse des erhaltenen Ergebnisses Veränderungen des Ergebnisses

11. JDBC. Grundsätzliche Nutzung von JDBC Verbindungsaufbau Anfragen Analyse des erhaltenen Ergebnisses Veränderungen des Ergebnisses 11. JDBC Grundsätzliche Nutzung von JDBC Verbindungsaufbau Anfragen Analyse des erhaltenen Ergebnisses Veränderungen des Ergebnisses Ziel: Verständnis für Konzepte von JDBC aufbauen 270 Überblick: Datenbankanfragen

Mehr

13. Testen von DB-Software

13. Testen von DB-Software 13. Testen von DB-Software Kurzeinführung JUnit Regeln zur Testerstellung Nutzung von DBUnit 378 Einschub: Testen mit JUnit Framework, um den Unit-Test eines Java-Programms zu automatisieren einfacher

Mehr

9. Effiziente Datenverwaltung

9. Effiziente Datenverwaltung 9. Effiziente Datenverwaltung Index ISAM B-Baum B*-Baum 225 Index wird erstellt, um den schnelleren Zugriff auf einzelne Spalten zu erlauben CREATE INDEX ON ([,]); Index

Mehr

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

Kapitel 10. JDBC und SQLJ. Prof. Dr. Wolfgang Weber Vorlesung Datenbanken 1 Kapitel 10 JDBC und SQLJ 1 JDBC und SQLJ Bisher: Einbettung von SQL (statisch bzw. dynamisch) in C, C++, COBOL, ADA (embedded SQL) bzw. prozedurale Erweiterungen für SQL in Oracle (PL/SQL) Was ist mit

Mehr

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

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 Universität Augsburg, Institut für Informatik WS 2006/2007 Dr. W.-T. Balke 11. Dez. 2006 M. Endres, A. Huhn, T. Preisinger Lösungsblatt 7 Aufgabe 2 + 3: Datenbanksysteme I import java.sql.*; import oracle.jdbc.driver.*;

Mehr

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

Datenbanksysteme. Programmieren von Datenbankzugriffen mit JDBC. Burkhardt Renz. Fachbereich MNI Technische Hochschule Mittelhessen Datenbanksysteme Programmieren von Datenbankzugriffen mit JDBC Burkhardt Renz Fachbereich MNI Technische Hochschule Mittelhessen Sommersemester 2018 Übersicht Architektur von JDBC Ziele von JDBC Grundstruktur

Mehr

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

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

Mehr

Java Database Connectivity (JDBC) 14.07.2009 Walther Rathenau Gewerbeschule 1

Java Database Connectivity (JDBC) 14.07.2009 Walther Rathenau Gewerbeschule 1 Java Database Connectivity (JDBC) 14.07.2009 Walther Rathenau Gewerbeschule 1 Was ist JDBC? Hauptsächlich eine Sammlung von Java Klassen und Schnittstellen für eine einfache Verbindung von Java Programmen

Mehr

Beispiel: DB-Mock (1/7)

Beispiel: DB-Mock (1/7) Beispiel: DB-Mock (1/7) Aufgabe: DB, auf die vereinfachend nur lesend zugeriffen wird mocken warum: benötigte keine DB-Lizenz, garantiert gleiche Werte ohne aufwändiges reset, kein Zeitverlust durch Verbindungsaufbau

Mehr

Oracle & Java HOW TO

Oracle & Java HOW TO Oracle & Java HOW TO Helge Janicke, Niels-Peter de Witt, Karsten Wolke 21. Januar 2002 Inhaltsverzeichnis 1 Java-Anbindung an Oracle-DB 2 2 Benötigte Programme und Daten 2 3 Einbinden der Klassen 2 4 Aufbau

Mehr

Middleware Spezialist OpenLink bietet universellen Treiber für die meisten DBMS (inkl. PostgreSQL) und ODBC Datenquellen.

Middleware Spezialist OpenLink bietet universellen Treiber für die meisten DBMS (inkl. PostgreSQL) und ODBC Datenquellen. JDBC Treiber Middleware Spezialist OpenLink bietet universellen Treiber für die meisten DBMS (inkl. PostgreSQL) und ODBC Datenquellen. JDBC Treiber kontaktiert Request Broker. Request Broker vermittelt

Mehr

Client/Server-Programmierung

Client/Server-Programmierung Client/Server-Programmierung WS 2017/2018 Betriebssysteme / verteilte Systeme rolanda.dwismuellera@duni-siegena.de Tel.: 0271/740-4050, Büro: H-B 8404 Stand: 14. September 2017 Betriebssysteme / verteilte

Mehr

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

Datenbanksysteme. Programmieren von Datenbankzugriffen mit JDBC. Burkhardt Renz. Fachbereich MNI Technische Hochschule Mittelhessen Programmieren von Datenbankzugriffen mit JDBC Fachbereich MNI Technische Hochschule Mittelhessen Sommersemester 2015 Überblick über das Package java.sql Übersicht Architektur von JDBC Grundstruktur eines

Mehr

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

Datenbanksysteme 2 Fachbereich Angewandte Informatik WS 11/12 Dipl.-Inf. Christian Pape. 6. Übung Datenbanksysteme 2 Fachbereich Angewandte Informatik WS 11/12 Dipl.-Inf. Christian Pape 6. Übung Aufgabe 1: In dieser Übung sollen Sie eine kleine Java-Anwendung schreiben, die auf die Oracle-Datenbank

Mehr

JUnit 4 Tutorial. Wolfgang Stöttinger

JUnit 4 Tutorial. Wolfgang Stöttinger JUnit 4 Tutorial Wolfgang Stöttinger JUnit 4 Tutorial... 1 1 Einführung in JUnit 4... 3 1.1 Wie funktioniert JUnit?... 3 1.2 Annotations... 3 1.2.1 Test Annotation... 3 1.2.2 Before Annotation... 3 1.2.3

Mehr

Java: MySQL-Anbindung mit JDBC.

Java: MySQL-Anbindung mit JDBC. Java: MySQL-Anbindung mit JDBC Vorarbeiten Wir brauchen: - MySQL-Server - JDBC-Treiber - (Import java.sql.*) Vorarbeiten MySQL-Server in unserem Falle: WAMP (= Apache) (runterladen, installieren, starten)

Mehr

JDBC. Java DataBase Connectivity

JDBC. Java DataBase Connectivity JDBC Java DataBase Connectivity JDBC-Schichten JDBC besteht aus 2 Teilen, 1. aus Datenbanktreibern, die den Anschluß von Java-Anwendungen an Datenbanksysteme wie Sybase, DB/2, Oracle, MS ACCESS oder Mini

Mehr

Willkommen. Datenbanken und Anbindung

Willkommen. Datenbanken und Anbindung Willkommen Datenbanken und Anbindung Welche stehen zur Wahl? MySQL Sehr weit verbreitetes DBS (YT, FB, Twitter) Open-Source und Enterprise-Version Libs in C/C++ und Java verfügbar Grundsätzlich ist ein

Mehr

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

JDBC. Es kann z.b. eine ODBC-Treiberverbindung eingerichtet werden, damit das JAVA-Programm auf eine ACCESS-DB zugreifen kann. JDBC in 5 Schritten JDBC (Java Database Connectivity) ist eine Sammlung von Klassen und Schnittstellen, mit deren Hilfe man Verbindungen zwischen Javaprogrammen und Datenbanken herstellen kann. 1 Einrichten

Mehr

11. Transaktionen. Motivation Problemfälle Beispiel Lösungsmöglichkeit. Datenbanken. Prof. Dr. Stephan Kleuker

11. Transaktionen. Motivation Problemfälle Beispiel Lösungsmöglichkeit. Datenbanken. Prof. Dr. Stephan Kleuker 11. Transaktionen Motivation Problemfälle Beispiel Lösungsmöglichkeit 298 Transaktionen (Einleitung) bisher: jede Änderung direkt auf der Datenbank; entspricht COMMIT nach jedem DB-Befehl ok, wenn alle

Mehr

Client/Server-Programmierung

Client/Server-Programmierung Client/Server-Programmierung WS 2014/2015 Betriebssysteme / verteilte Systeme rolanda.dwismuellera@duni-siegena.de Tel.: 0271/740-4050, Büro: H-B 8404 Stand: 20. November 2015 Betriebssysteme / verteilte

Mehr

Datenbanksysteme I. Aufgabe 1: Erstellen einer Multimedia-Datenbank. Grundlage sind wiederum bereits implementierte Methoden aus Übungsblatt 6:

Datenbanksysteme I. Aufgabe 1: Erstellen einer Multimedia-Datenbank. Grundlage sind wiederum bereits implementierte Methoden aus Übungsblatt 6: Universität Augsburg, Institut für Informatik Wintersemester 2010/2011 Prof. Dr. W. Kießling 17. Dez. 2010 Dr. A. Huhn, F. Wenzel, M. Endres Lösungsblatt 7 Aufgabe 1: Erstellen einer Multimedia-Datenbank

Mehr

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

seit Java 1.1 Bestandteil der API: packages java.sql, javax.sql JDBC inoffizielle Abkürzung für: Java Database Connectivity seit Java 1.1 Bestandteil der API: packages java.sql, javax.sql ist eine Menge von Klassen und Methoden, um aus Java-Programmen relationale Datenbanken

Mehr

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

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 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

Mehr

Datenbanken SQL JDBC. Programmieren II. Dr. Klaus Höppner. Hochschule Darmstadt Sommersemester / 21

Datenbanken SQL JDBC. Programmieren II. Dr. Klaus Höppner. Hochschule Darmstadt Sommersemester / 21 Programmieren II Dr. Klaus Höppner Hochschule Darmstadt Sommersemester 2010 1 / 21 Datenbanken SQL JDBC 2 / 21 Relationale Datenbanken Ein Datenbanksystem ist ein System zur Speicherung von (großen) Datenmengen:

Mehr

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

Einführung in JDBC. IFIS Universität zu Lübeck 18.04.2007 Einführung in JDBC IFIS Universität zu Lübeck 18.04.2007 1 Was ist JDBC Standard für relationale DB: SQL Vor JDBC: Open Database Connectivity (ODBC), uniforme Schnittstelle für Zugriff JDBC: Programmierschnittstelle

Mehr

Vorlesung Informatik II

Vorlesung Informatik II Vorlesung Informatik II Universität Augsburg Sommersemester 2011 Prof. Dr. Robert Lorenz Lehrprofessur für Informatik 10. Java: Datenhaltung mit Datenbanken 1 Datenbank-Programme Derby (Hersteller: Apache

Mehr

11. Transaktionen. Motivation Problemfälle Beispiel Lösungsmöglichkeit. Datenbanken. Prof. Dr. Stephan Kleuker

11. Transaktionen. Motivation Problemfälle Beispiel Lösungsmöglichkeit. Datenbanken. Prof. Dr. Stephan Kleuker 11. Transaktionen Motivation Problemfälle Beispiel Lösungsmöglichkeit 345 Transaktionen (Einleitung) bisher: jede Änderung direkt auf der Datenbank; entspricht COMMIT nach jedem DB-Befehl ok, wenn alle

Mehr

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

Programmieren II. Beispiele für RDBMS. Relationale Datenbanken. Datenbanken SQL. Dr. Klaus Höppner JDBC. Hochschule Darmstadt SS 2008 Programmieren II Datenbanken Dr. Klaus Höppner SQL Hochschule Darmstadt SS 2008 JDBC 1 / 20 2 / 20 Relationale Datenbanken Beispiele für RDBMS Ein Datenbanksystem ist ein System zur Speicherung von (großen)

Mehr

Java Database Connectivity-API (JDBC)

Java Database Connectivity-API (JDBC) Java Database Connectivity-API (JDBC) Motivation Design Grundlagen Typen Metadaten Transaktionen Pratikum SWE 2 M. Löberbauer, T. Kotzmann, H. Prähofer 1 Motivation Problem: Zugriff auf ein DBMS ist Herstellerabhängig

Mehr

Tag 5 Inhaltsverzeichnis

Tag 5 Inhaltsverzeichnis Tag 5 Inhaltsverzeichnis ODBC / JDBC: Ziel und Prinzip JDBC Überblick Erstes Beispiel Queries (Execute- und UpdateQuery) Der Typ "ResultSet" Diverses Metadata PreparedStatement Transaktionen und Batches

Mehr

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

Universität Augsburg, Institut für Informatik WS 2014/2015 Prof. Dr. W. Kießling 05. Dez F. Wenzel, L. Rudenko Lösungsblatt 7 Universität Augsburg, Institut für Informatik WS 2014/2015 Prof. Dr. W. Kießling 05. Dez. 2014 F. Wenzel, L. Rudenko Lösungsblatt 7 Aufgabe 1: JDBC 2.0 und Scrollable Result Sets Datenbanksysteme I Lösungen

Mehr

Datenbankanwendungen (JDBC)

Datenbankanwendungen (JDBC) Datenbankanwendungen (JDBC) Hierarchie: Connection Transaction Statement Connection Aufbau (klassisch): Registrierung des JDBC Driver beim DriverManager: Class.forName(JDBC Driver); Eigentlicher Verbindungsaufbau

Mehr

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

Datenbankentwurf & Datenbankzugriff mit JDBC. Georg Köster Sven Wagner-Boysen Datenbankentwurf & Datenbankzugriff mit JDBC Georg Köster Sven Wagner-Boysen 6. November 2007 Gliederung 2 Datenbankentwurf für ProminentPeople.info ER-Modell Relationaler Entwurf Normalisierung Datenbankzugriff

Mehr

Java Database Connectivity-API (JDBC)

Java Database Connectivity-API (JDBC) Java Database Connectivity-API (JDBC) Motivation Design Grundlagen Typen Metadaten Transaktionen Pratikum SWE 2 M. Löberbauer, T. Kotzmann, H. Prähofer 1 Motivation Problem: Zugriff auf ein DBMS ist Herstellerabhängig

Mehr

Kurzübersicht JDBC. Marc Monecke. monecke@informatik.uni-siegen.de. 15. Januar 2003

Kurzübersicht JDBC. Marc Monecke. monecke@informatik.uni-siegen.de. 15. Januar 2003 Kurzübersicht JDBC Marc Monecke monecke@informatik.uni-siegen.de 15. Januar 2003 Zusammenfassung Über JDBC-Schnittstellen können Anwendungsprogramme auf Datenbanken zugreifen, ohne daß dabei hersteller-

Mehr

11 Anwendungsprogrammierung

11 Anwendungsprogrammierung 11 11 11.1 Programmiersprachenanbindung 11.2 11.3 183 11 Programmiersprachenanbindung Programmiersprachenanbindung Kopplungsarten: prozedurale oder CALL-Schnittstellen (call level interface) Beispiele:

Mehr

Java Database Connectivity-API (JDBC)

Java Database Connectivity-API (JDBC) Java Database Connectivity-API (JDBC) Motivation Design Grundlagen Typen Metadaten Transaktionen Pratikum SWE 2 M. Löberbauer, T. Kotzmann, H. Prähofer 1 Motivation Problem: Zugriff auf ein DBMS ist herstellerabhängig

Mehr

Java und Datenbanken

Java und Datenbanken Java und Datenbanken Benutzerschnittstelle DB-Client Client Benutzerschnittstelle CORBA, HTTP,... DB-Client Anwendungslogik DB-Schnittstelle JDBC, SQLJ Anwendungslogik DB-Schnittstelle Anwendungs- Server

Mehr

12. Programmierung in der Datenbank

12. Programmierung in der Datenbank 12. Programmierung in der Datenbank Motivation für Programme in der Datenbank Aufbau von serverseitigen Programmen Ausnahmebehandlung Erstellung von Triggern 305 Erweiterung relationaler Einbettung von

Mehr

Webbasierte Informationssysteme

Webbasierte Informationssysteme SS 2004 Prof. Dr. Stefan Böttcher Universität Paderborn - SS 2004 - Prof. Dr. Stefan Böttcher Folie 1 Was ist eine relationale Datenbank? Menge von Relationen (=Tabellen) und Constraints (=Integritätsbedingungen)

Mehr

Musterlösung Übungsblatt 11

Musterlösung Übungsblatt 11 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,

Mehr

Tag 5 Inhaltsverzeichnis

Tag 5 Inhaltsverzeichnis Tag 5 Inhaltsverzeichnis ODBC / JDBC: Ziel und Prinzip JDBC Überblick Erstes Beispiel Queries (Execute- und UpdateQuery) Der Typ "ResultSet" Diverses Metadata PreparedStatement Transaktionen und Batches

Mehr

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

DB-Programmierung. Lehr- und Forschungseinheit Datenbanken und Informationssysteme 1. Ziele. DB2 Zugriff mit Java selbst programmieren DB-Programmierung Lehr- und Forschungseinheit Datenbanken und Informationssysteme 1 Ziele static SQL verstehen Build-Prozess / Art des Datenzugriffs Host-Variablen Vor- / Nachteile dynamic SQL verstehen

Mehr

Klausur Datenbanken II

Klausur Datenbanken II Klausur Datenbanken II 8.3.2001 Name Vorname Semester Matrikelnr Aufgabe Punkte maximal 1 8 2 8 3 3 4 3 5 4 6 6 7 6 8 6 9 [Zusatz] [4] Summe 44 Punkte erreicht Bitte geben Sie die Lösungen möglichst direkt

Mehr

Datenbanken. Anwendungsentwicklung in Datenbanken: Prozedurale Spracherweiterung von SQL (z.b. PL/SQL bei Oracle)

Datenbanken. Anwendungsentwicklung in Datenbanken: Prozedurale Spracherweiterung von SQL (z.b. PL/SQL bei Oracle) Anwendungsentwicklung in Datenbanken: Unter Anwendungsentwicklung in Datenbanken versteht man die Entwicklung von Anwendungen, die über die Adhoc-Abfrage mit SQL hinausgeht. Es gibt verschiedene Möglichkeiten,

Mehr

Übung: Data Warehousing und Data Mining

Übung: Data Warehousing und Data Mining Ü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

Mehr

Oracle: Abstrakte Datentypen:

Oracle: Abstrakte Datentypen: Oracle: Abstrakte Datentypen: Oracle bietet zwei mögliche Arten um abstrakte Datentypen zu implementieren: Varying Array Nested Table Varying Array (kunde) kdnr kdname gekaufteart 1 Mustermann 1 4 5 8

Mehr

JDBC. JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network. Institut für Systemsoftware, Johannes Kepler Universität Linz

JDBC. JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network. Institut für Systemsoftware, Johannes Kepler Universität Linz JDBC JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz JDBC Einführung Verbindungsaufbau Datenbankanweisungen Arbeiten

Mehr

Webbasierte Informationssysteme

Webbasierte Informationssysteme SS 2004 Prof. Dr. Stefan Böttcher Universität Paderborn - SS 2004 - Prof. Dr. Stefan Böttcher Folie 1 Was ist eine relationale Datenbank? Menge von Relationen (=Tabellen) und Constraints (=Integritätsbedingungen)

Mehr

GML und Bibliothek oracle.sdoapi

GML und Bibliothek oracle.sdoapi GML und Bibliothek oracle.sdoapi Nachfolgend werden die Java-Klassen aus dem GML-Kapitel unter Verwendung der alten Klassenbibliothek oracle.sdoapi dargestellt. Erzeugung von GML 3.1 aus SDO_GEOMETRY-Objekten

Mehr

1a) SQL Stored Procedure via IDs

1a) SQL Stored Procedure via IDs 1a) SQL Stored Procedure via IDs Erstellen Sie analog zu Aufgabe 2d) des ersten Übungsblatts eine SQL Stored Procedure, welche den Freundschaftsgrad zweier Benutzer eines sozialen Netzwerks aktualisiert.dazu

Mehr

Java und Datenbanksysteme Datenbankanbindung mit JDBC

Java und Datenbanksysteme Datenbankanbindung mit JDBC Java und Datenbanksysteme Datenbankanbindung mit JDBC 30.05.2001 Stefan Niederhauser sn@atelier-w.ch 1-Einführung Datenbanksysteme Java und Datenbanken: JDBC Geschichte der JDBC-Versionen Vergleich von

Mehr

Prozedurale Datenbank- Anwendungsprogrammierung

Prozedurale Datenbank- Anwendungsprogrammierung Idee: Erweiterung von SQL um Komponenten von prozeduralen Sprachen (Sequenz, bedingte Ausführung, Schleife) Bezeichnung: Prozedurale SQL-Erweiterung. In Oracle: PL/SQL, in Microsoft SQL Server: T-SQL.

Mehr

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

Funktionen. Überblick über Stored Functions. Syntax zum Schreiben einer Funktion. Schreiben einer Funktion Überblick über Stored Functions Funktionen Eine Funktion ist ein benannter PL/SQL- Block, der einen Wert zurückgibt. Eine Funktion kann in der Datenbank als Objekt zur wiederholbaren Ausführung gespeichert

Mehr

Zugriff auf die Datenbank. Ulf Leser Wissensmanagement in der Bioinformatik

Zugriff auf die Datenbank. Ulf Leser Wissensmanagement in der Bioinformatik Zugriff auf die Datenbank Ulf Leser Wissensmanagement in der Bioinformatik Wie komme ich an die Datenbank? Alternativen Alles in Java machen JDBC Treiber von Oracle herunterladen Java programmieren Java-basierte

Mehr

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

Udo Matthias Munz. Datenbanken und SQL. mit. Einführung. Informationstechnik Udo Matthias Munz Datenbanken und SQL mit Einführung Informationstechnik Zugriff auf eine Datenbank... 2 ODBC... 2 Eine DSN einrichten... 3 Verbindung zu einer Datenbank... 4 Datenbank... 4 Metadaten der

Mehr

Java Database Connectivity. Gracin Denis, IB 4 C

Java Database Connectivity. Gracin Denis, IB 4 C Java Database Connectivity Gracin Denis, IB 4 C Agenda 1. JDBC-Architektur 2. Treiber der JDBC 2.1 Typ-1 Treiber 2.2 Typ-2 Treiber 2.3 Typ-3 Treiber 2.4 Typ-4 Treiber 3. Verbindungsablauf 4. Connection

Mehr

Wie kommen die Befehle zum DBMS

Wie kommen die Befehle zum DBMS Wie kommen die Befehle zum DBMS Dr. Karsten Tolle Datenbanken und Informationssysteme Wie kommen die Befehle zum DBMS Bisher gesehen: SQL direkt zum DBMS Workbench Kommandozeile IBM Query Tool Weitere?

Mehr

Java Database Connectivity API / JDBC

Java Database Connectivity API / JDBC Java Database Connectivity API / JDBC Motivation Design Treiber Grundlagen Metadaten Transaktionen Exceptions Pratikum SWE 2 M. Löberbauer, T. Kotzmann, H. Prähofer 1 Motivation Problem: Zugriff auf DBMS

Mehr

Datenbanksysteme I Übung: JDBC. Jana Bauckmann

Datenbanksysteme I Übung: JDBC. Jana Bauckmann Datenbanksysteme I Übung: JDBC Jana Bauckmann Wo reicht SQL alleine nicht? 2 Web-Anwendungen Daten übersichtlich und schön präsentieren Komplizierte Fragestellungen Sind sich 2 Tupel ähnlich? Duplikaterkennung

Mehr

PROGRAMMIERPROJEKT 2016 VERWENDETE TECHNOLOGIEN

PROGRAMMIERPROJEKT 2016 VERWENDETE TECHNOLOGIEN PROGRAMMIERPROJEKT 2016 VERWENDETE TECHNOLOGIEN Mathias Weber und Annette Bieniusa ÜBERBLICK Spark SQL SQL in Java SPARK WAS IST DAS? Framework zur Erstellung von Web-Anwendungen in Java Einfach zu verwenden

Mehr

Hauptschritte einer JDBC-App

Hauptschritte einer JDBC-App JDBC Java DataBase Connectivity Sammlung von Klassen und Interfaces zur Arbeit mit Datenbanken auf Basis von SQL Package java.sql Datenbankmanagementsystem und eine oder mehrere Datenbanken Jdbc Driver,

Mehr

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

Mehr Performance mit JDBC JAVA-Anwendungen und die Oracle-Datenbank. Carsten Czarski Business Unit Database Oracle Deutschland GmbH Mehr Performance mit JDBC JAVA-Anwendungen und die Oracle-Datenbank Carsten Czarski Business Unit Database Oracle Deutschland GmbH Oracle JDBC Treiber Versionen Datenbank-Release J D B C 10.1.0 9.2.0 9.0.1

Mehr

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

Hochschule Karlsruhe Technik und Wirtschaft- 10.7.2013. Anhänge: Fakultät für Informatik und Wirtschaftsinformatik SS 2013 Prof. Schmidt. Fakultät für Informatik und Wirtschaftsinformatik SS 2013 Datenbanken und Informationssysteme II Szenario: Projektverwaltung. Es gibt Projekte, Projektleiter, Mitarbeiter und ihre Zuordnung zu Projekten.

Mehr

Der Einsatz von SELECT from INSERT auf dem System i

Der Einsatz von SELECT from INSERT auf dem System i Zwei Operationen werden zu einer neuen Funktion von Jinmei Shen und Karl Hanson INSERT und SELECT waren vor V6R1 in DB2 für i5/os zwei getrennte Operationen. Um eingefügte Spaltenwerte abzufragen, konnte

Mehr

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

UNIVERSITÄT ULM Fakultät für Ingenieurswissenschaften und Informatik Institut für Datenbanken und Informationssysteme UNIVERSITÄT ULM Fakultät für Ingenieurswissenschaften und Informatik Institut für Datenbanken und Informationssysteme 8. Übung zur Vorlesung Datenbanksysteme WS 08/09 Musterlösung Aufgabe 8-1: SQLJ //

Mehr

Komponentenbasierten Softwareentwicklung

Komponentenbasierten Softwareentwicklung Grundlagen der Komponentenbasierten Softwareentwicklung Hochschule Osnabrück 1 Ich, geboren 1967, verheiratet, 2 Kinder seit 1.9.09 an der FH, Professur für Software- vorher 4 Jahre FH Wiesbaden davor

Mehr

Funktion definieren Gibt Summe der Gehälter zurück. Aufruf in einem SQL-Statement

Funktion definieren Gibt Summe der Gehälter zurück. Aufruf in einem SQL-Statement Funktion definieren Gibt Summe der Gehälter zurück Aufruf in einem SQL-Statement Dr. Christian Senger Einführung PL/SQL 1 Procedures & Transaktionen CREATE OR REPLACE PROCEDURE write_log ( log_code IN

Mehr

Entwicklungsumgebung für die Laborübung

Entwicklungsumgebung für die Laborübung Entwicklungsumgebung für die Laborübung VL Datenbanksysteme Ingo Feinerer Arbeitsbereich Datenbanken und Artificial Intelligence Institut für Informationssysteme Technische Universität Wien Gliederung

Mehr

Datenbanken SQL-Grundlagen JDBC SQL-Constraints. Programmieren II. Martin Schultheiß. Hochschule Darmstadt Sommersemester 2011

Datenbanken SQL-Grundlagen JDBC SQL-Constraints. Programmieren II. Martin Schultheiß. Hochschule Darmstadt Sommersemester 2011 Programmieren II Martin Schultheiß Hochschule Darmstadt Sommersemester 2011 1 Datenbanken 2 SQL-Grundlagen 3 JDBC 4 SQL-Constraints Relationale Datenbanken Ein Datenbanksystem ist ein System zur Speicherung

Mehr

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 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 2009/2010 Prof. Dr. W. Kießling 11. Dez. 2009 Dr. A. Huhn, F. Wenzel, M. Endres Lösungsblatt 7 Aufgabe 1: Basisoperationen mit JDBC Datenbanksysteme I a)

Mehr

Datenbankzugriff mit JDBC

Datenbankzugriff mit JDBC Java: Kapitel 8 Datenbankzugriff mit JDBC Programmentwicklung WS 2008/2009 Holger Röder holger.roeder@informatik.uni-stuttgart.de Überblick über Kapitel 8 Einführung in SQL und JDBC Verbindung zur Datenbank

Mehr

Kapitel 11: Anwendungsentwicklung

Kapitel 11: Anwendungsentwicklung Ludwig Maximilians Universität München Institut für Informatik Lehr- und Forschungseinheit für Datenbanksysteme Skript zur Vorlesung Wintersemester 2015/2016 Kapitel 11: Anwendungsentwicklung Vorlesung:

Mehr

Modifikation der Datenbank

Modifikation der Datenbank Modifikation der Datenbank Löschen Einfügen Änderungen Änderungen von Sichten 71 Löschen Wir haben bereits gesehen, dass wir den gesamten Inhalt einer Tabelle r löschen können durch das Kommando: delete

Mehr

Datenbanken & Informationssysteme Übungen Teil 1

Datenbanken & Informationssysteme Übungen Teil 1 Programmierung von Datenbankzugriffen 1. Daten lesen mit JDBC Schreiben Sie eine Java-Anwendung, die die Tabelle Books in der Datenbank azamon ausgibt. Verwenden Sie dabei die SQL-Anweisung select * from

Mehr

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

Exercises for the course Databases and Information Systems I WS 2006/2007 Special exercise JDBC Prof. Dr. Stefan Böttcher Exercises for the course Databases and Information Systems I WS 2006/2007 Special exercise JDBC 1. Preliminary configurations 1.1. Register ODBC database Chose Arbeitsplatz Systemsteuerung

Mehr

Probeklausur Datenbanktechnologie

Probeklausur Datenbanktechnologie Probeklausur Datenbanktechnologie Prof. Dr. Ingo Claßen Name: Vorname: MatrNr: Bewertung 1 25 2 15 3 10 4 10 Übung 40 Σ = 100 Punkte Punkte: Note: Notenspiegel 100 95 1,0 94 90 1,3 89 85 1,7 84 80 2,0

Mehr

vs. Fehler zur Übersetzungszeit

vs. Fehler zur Übersetzungszeit Client-Server-Architektur, Anbindung von Programmiersprachen, Call-Level-Schnittstellen: /, JDBC, :, J, gespeicherte Prozeduren, prozedurale Erweiterungen: /PSM, PL/. IPD, Forschungsbereich Systeme der

Mehr

Betreutes Programmieren Vorlesung Informatik II, Blatt 7 Musterlösung

Betreutes Programmieren Vorlesung Informatik II, Blatt 7 Musterlösung SS 2011 Fakultät für Angewandte Informatik Lehrprofessur für Informatik 15.06.2011 Prof. Dr. Robert Lorenz Betreutes Programmieren Vorlesung Informatik II, Blatt 7 Musterlösung Programmieraufwand für geübte

Mehr

Hauptschritte einer JDBC-App

Hauptschritte einer JDBC-App JDBC Java DataBase Connectivity Sammlung von Klassen und Interfaces zur Arbeit mit Datenbanken auf Basis von SQL Package java.sql Datenbankmanagementsystem und eine oder mehrere Datenbanken Jdbc Driver,

Mehr

Übung: Data Warehousing und Data Mining

Übung: Data Warehousing und Data Mining Übung: Data Warehousing und Data Mining Sebastian Wandelt 23. Oktober 2014 wandelt@informatik.hu-berlin.de Überblick Organisatorisches Verbinden mit Oracle 1. Aufgabenblatt Gruppenfindung Die Übung Über

Mehr

Datenbank und Informationssysteme

Datenbank und Informationssysteme Datenbank und Informationssysteme Inhaltsverzeichnis 1 Programmierung von Datenbankzugriffen 3 1.1 Architektur des SQL/CLI am Beispiel JDBC................... 4 1.2 Anfragen und Ergebnismengen in JDBC......................

Mehr

JDBC. Allgemeines ODBC. java.sql. Beispiele

JDBC. Allgemeines ODBC. java.sql. Beispiele JDBC Java Data Base Connectivity Programmierschnittstelle für relationale Datenbanken Sammlung von Klassen, welche zum Aufbau einer Verbindung zwischen einem Java-Programm und einer Datenbank dienen Verwendet

Mehr

Grundlagen der Informatik

Grundlagen der Informatik Grundlagen der Informatik Vorlesungsprüfung vom 13.06.2008 Gruppe B Lösung Name: Matrikelnummer: Zuerst bitte Name und Matrikelnummer auf das Titelblatt schreiben. Es sind keine Unterlagen und keine Teamarbeit

Mehr

CADSTAR MRP-Link. MRP-Link ist erstellt von:

CADSTAR MRP-Link. MRP-Link ist erstellt von: CADSTAR MRP-Link MRP-Link ist erstellt von: CSK CAD Systeme Kluwetasch Zip: 2161 Town: Altenholz Street: Struckbrook 9 Tel: +9-31-32917-0 Fax: +9-31-32917-26 Web: http://www.cskl.de E-Mail: Kluwetasch@cskl.de

Mehr

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

Dies ist eine Probeklausur, die keine formalen Schlüsse auf die Form, die Struktur oder den Inhalt der endgültigen Klausur zulässt. Thema: Datenbanken Dozent: Prof. Dr. Stephan Kleuker Seitennummer: Seite 1 von 12 Studiengang: Technische Informatik Studiensemester: 3 Datum: Bearbeitungszeit: 120 Minuten Matrikelnummer: Name: Dies ist

Mehr

Datenbanksysteme I. Aufgabe 1: JDBC Fehlerbehandlung und Meta Data. Lösungsvorschlag:

Datenbanksysteme I. Aufgabe 1: JDBC Fehlerbehandlung und Meta Data. Lösungsvorschlag: Universität Augsburg, Institut für Informatik WS 2011/2012 Prof. Dr. W. Kießling 16. Dez. 2011 Dr. M. Endres, Dr. S. Mandl, F. Wenzel Lösungsblatt 7 Datenbanksysteme I Aufgabe 1: JDBC Fehlerbehandlung

Mehr

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

Kapitel 9. Embedded SQL. Prof. Dr. Wolfgang Weber Vorlesung Datenbanken 1 Kapitel 9 Embedded SQL Vorlesung Datenbanken 1 Embedded SQL (siehe auch [Date00]) Arbeitsweise ähnlich PL/SQL, allerdings: Normale Programmiersprache mit eingestreuten SQL-Befehlen und anderen Befehlen

Mehr

JDBC- JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network. M. Löberbauer, T. Kotzmann, H. Prähofer

JDBC- JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network. M. Löberbauer, T. Kotzmann, H. Prähofer JDBC- Java Database Connectivity JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Pratikum SWE 2 M. Löberbauer, T. Kotzmann, H. Prähofer JDBC Einführung Verbindungsaufbau Datenbankanweisungen

Mehr

Übung PL/SQL Trigger Lösungen

Übung PL/SQL Trigger Lösungen Übung PL/SQL Trigger Lösungen 1) Gebe das aktuelle Datum aus. Wofür steht dual? Ändere das Datum für Deine aktuelle Session auf das Format Jahr (4 Stellen) Monat (2 Stellen) Tag (2 Stellen)[Leerzeichen]Stunde

Mehr

Fakultät für Informatik & Wirtschaftsinformatik DB & IS II SS Transaktionen & ACID. Dr. Christian Senger Transaktionen & ACID 1

Fakultät für Informatik & Wirtschaftsinformatik DB & IS II SS Transaktionen & ACID. Dr. Christian Senger Transaktionen & ACID 1 Transaktionen & ACID Dr. Christian Senger Transaktionen & ACID 1 PC Architekturen Kein Mehrbenuzterbetrieb Recovery? Benutzerabbrüche? PC Lokale Datenbank PC PC PC PC PC PC-System DBMS PC PC PC PC Internet

Mehr