Datenbank-Zugriffsschnittstellen am Beispiel von Oracle und PL/SQL.

Slides:



Advertisements
Ähnliche Präsentationen
Object Relational Mapping
Advertisements

Ein- und Ausgabe von Dateien
Datenbank-Zugriffsschnittstellen. © Prof. T. Kudraß, HTWK Leipzig Überblick Datenbankzugriff mit PHP Datenbankzugriff mit JDBC Datenbankzugriff mit PSP.
System J – Compiler – Praktikum: Datenbanksystementwicklung Knut Stolze
MySQL.
10. Grundlagen imperativer Programmiersprachen
Internet-Datenbanken
Allgemeine Technologien II
Objektorientierung mit VBA
Internet-Datenbanken Grundlagen des WWW HTML HTTP Web-Anbindung von Datenbanken Servlets JSP JDBC XML Datenmodell Schemabeschreibungssprachen Anfragesprachen.
FH-Hof Einbindung von JavaScript Anweisungen
Java: Dynamische Datentypen
FH-Hof Servlets Richard Göbel. FH-Hof Konzept Servlets werden auf der Server-Seite durch ein Formular aufgerufen werten die Eingaben aus einem Formular.
FH-Hof SQLJ Richard Göbel. FH-Hof SQLJ - Idee Erweiterung von Java um SQL Die Verwendung von SQL-Anweisungen innerhalb einer Programmiersprache wird vereinfacht.
SQL als Abfragesprache
IS: Datenbanken, © Till Hänisch 2000 CREATE TABLE Syntax: CREATE TABLE name ( coldef [, coldef] [, tableconstraints] ) coldef := name type [länge], [[NOT]NULL],
Programmierung von Datenbank Anwendungen
Dynamische Webseiten mit PHP
PL/SQL – Die prozedurale Erweiterungssprache Zu SQL
Oracle PL/SQL Server Pages (PSP). © Prof. T. Kudraß, HTWK Leipzig Grundidee: PSP – Internet-Seiten mit dynamischer Präsentation von Inhalten durch Einsatz.
Open Database Connectivity (ODBC). © Prof. T. Kudraß, HTWK Leipzig Open Database Connectivity (ODBC) Idee: – API für eine DBMS, das ein Call-Level-Interface.
Oracle WebServer - Einführung. © Prof. T. Kudraß, HTWK Leipzig Oracle Web Application Server HTML WebServer ® File system Static HTML PL/SQL Packages.
Spezielle Aspekte der Anbindung von Datenbanken im Web.
SQL/XML. © Prof. T. Kudraß, HTWK Leipzig 2 2 Motivation Speicherung von XML in allen großen kommerziellen DBMS vorhanden proprietäre Lösungen für die.
Publikation von XML-Daten mit XSQL Pages. © Prof. T. Kudraß, HTWK Leipzig Vorteile von XSQL Pages einfache Generierung von XML-Dokumenten auf der Basis.
Text-Retrieval mit Oracle Vortrag von Andreas Mück & David Diestel.
Modularisierungstechniken
Otto-von-Guericke-Universität MagdeburgGamal Kassem Übung 7 Reports mit Datenbankzugriff.
Die Skriptsprache Perl (2) Wolfgang Friebel DESY Zeuthen.
JDBC -Java Database Connectivity-. 15./22. April 2004JDBC2 JDBC.... verbindet Java-Programme mit SQL-basierten Datenbanken.. liefert eine generische SQL-API.
DVG Kommentare1 Kommentare. DVG Kommentare 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht.
DVG Methoden 1 Methoden. 2 int dezi = Integer.parseInt(args[0]); boolean vz = (dezi>=0); dezi = Math.abs(dezi); String Bin = ""; do { } while.
DVG Klassen und Objekte
DVG Kommentare 1 Kommentare. 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht bis zum Ende der Zeile.
JDBC EDV JDBC.
Einführung in die Programmierung Datensammlung
Einführung MySQL mit PHP
Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Cursor-Konzept u Zugriff auf Mengen von Ergebnistupeln u In SQLJ Iteratoren u Vergleichbar.
Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Aufbau einer Verbindung zur Datenbank import java.net.URL; import java.sql.*; class JDBCExample.
JDBC: JAVA Database Connectivity
... und alles was dazugehört
Einführung Servlets/JSPs
Was umfaßt die CORBA Core Spezifikation? Welche zusätzlichen Komponenten muß ein ORB Produkt beinhalten? Core: CORBA Objekt Modell CORBA Architektur OMG.
SQL PHP und MySQL Referat von Katharina Stracke und Carina Berning
Wir bauen uns eine Webapplikation!
1 Sg 3 – JSP - Java Server Pages Softwareengineering Praktikum Java Server Pages Nicole Brandstätter Josef Sturm Karl Streicher.
Betrieb von Datenbanken Marco Skulschus & Marcus Wiederstein
PHP und MYSQL am Organisatorisches Der komplette Kurs im Schnelldurchgang Bewertung von wichtig und unwichtig Historisch Kulturwissenschaftliche.
Folgendes kann missbraucht werden: formulare unverschlüsselte login-informationen ungeschützte includes SQL-injection reto ambühler
WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #8 SQL (Teil 5)
WS 2013/14 Datenbanksysteme D0 15:15 – 16:45 R Vorlesung #5 SQL (Teil 2)
SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #9 SQL (Teil 4)
WS 2009/10 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #7 SQL (Teil 4)
Datenbanksysteme für hörer anderer Fachrichtungen
PL/SQL - Kurze Einführung April 2003Übung Data Warehousing: PL/SQL 2 PL/SQL.. ist eine Oracle-eigene, prozedurale Programmiersprache Sämtliche.
Einführung in PHP.
Einführung in PHP 5.
Mag. Andreas Starzer weloveIT – EDV Dienstleistungen
Datenbankanbindung mit
Structured Query Language
8 Erzeugen und Verwalten von Tabellen Ziele Kennenlernen der wichtigsten Datenbankobjekte Anlegen von Tabellen Datentypen zur Definition von Spalten.
Java Syntaxdiagramme Buchstabe A B Z a z ... Ziffer
Alois Schütte Advanced System Programming 2 Interprozeßkommunikation  2.1 JVM Ablaufumgebung  2.2 Java Native Interface (JNI)  Verwendung von.
11 Verwaltung von Abhängigkeiten. Ziele Am Ende dieser Lektion verfügen Sie über die folgenden Kenntnisse: Überwachen prozeduraler Abhängigkeiten Effekte.
WS 2014/15 Datenbanksysteme D0 15:15 – 16:45 R Vorlesung #6 SQL (Teil 3)
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R Vorlesung #8 SQL (Teil 5)
JDBC1 Motivation(I) JDBC keine Abkürzung, sondern geschützter Name (inoffiziell: für Java Database Connectivity) unterschiedliche DBS haben unterschiedliche.
Datenbanken erstellen mit PostgreSQL
XML-Erweiterungen in ORDBMS Seminar: DBMS für spezielle Anwendungen Florian Brieler.
Create Table, Rechte und Rollen
 Präsentation transkript:

Datenbank-Zugriffsschnittstellen am Beispiel von Oracle und PL/SQL

© Prof. T. Kudraß, HTWK Leipzig Kommunikation mit der Datenbank Vorbereiten einer SQL-Anweisung Freigabe der Ressourcen Verbindungsaufbau Lesen der Ergebnismenge Verbindungsabbau Ausführung einer Anweisung

© Prof. T. Kudraß, HTWK Leipzig Überblick Datenbank-Zugriff Datenbankzugriff mit PL/SQL Server Pages (PSP) Zugriff auf Metadaten in PL/SQL Dynamisches SQL – Parametrisierung von Anfragen – Dynamischer Aufbau von WHERE-Bedingungen – Dynamische SELECT- und FROM-Klausel

© Prof. T. Kudraß, HTWK Leipzig Entwicklung von PL/SQL Server Pages (PSP) 1. Schreiben der PL/SQL Server Page Standard-Skripttag Spezielle Skripttags: - Pages - Prozeduren - Parameter - Deklarationen - Expression Blocks - Include - Kommentare 2. Kompilieren der PSP-Datei als Stored Procedure 3. Aufruf der PSP im Browser

© Prof. T. Kudraß, HTWK Leipzig Standard-Skripttag Funktion: Begrenzung von PL/SQL- Anweisungen Inhalt: beliebige PL/SQL-Statements, z.B. Prozeduraufrufe Syntax

© Prof. T. Kudraß, HTWK Leipzig Spezielle Tags: Page Direktive Funktion: Charakterisierung der PSP Attribute: – language: verwendete Skriptsprache (PL/SQL Standard) – contentType: Inhaltstyp der Seite; text/html Standard – errorPage: PSP-Seite, die auf auftretenden Fehlern aufgerufen wird (Standard: keine Datei) <% page [language=PL/SQL] [contentType=content type string] [errorPage=file.psp] %> <% page [language=PL/SQL] [contentType=content type string] [errorPage=file.psp] %> Syntax

© Prof. T. Kudraß, HTWK Leipzig Spezielle Tags: Procedure & Parameter Direktive Funktion: Spezifikation von Prozedur und Parameter (alles IN) Attribute: – procedure: Name des Prozedur – parameter: Name des Parameters – type: Datentyp des Parameters; Standardwert varchar2 (ohne Länge) – default: Standardwert für Parameter Syntax [type=PL/SQL datatype] [default=value] %> [type=PL/SQL datatype] [default=value] %>

© Prof. T. Kudraß, HTWK Leipzig Spezielle Tags: Declaration Direktive Funktion: Deklaration von Variablen und Cursor auf der ganzen Seite Beispiel: <%! PL/SQL declaration; [PL/SQL declaration;]... %> <%! PL/SQL declaration; [PL/SQL declaration;]... %> Syntax <%! cursor prod_cur is select * from products where price between minprice and´maxprice vc_name varchar2(200):=Peter; %> <%! cursor prod_cur is select * from products where price between minprice and´maxprice vc_name varchar2(200):=Peter; %>

© Prof. T. Kudraß, HTWK Leipzig Spezielle Tags: Expression Block / Print Direktive Funktion: Ausgabe eines beliebigen PL/SQL-Ausdrucks (String, Zahl, Ergebnis eines Funktionsaufrufs) Beispiel: Syntax oder The employee name is oder The employee name is

© Prof. T. Kudraß, HTWK Leipzig Spezielle Tags: Include Direktive Funktion: Einbinden des Quelltexts anderer Dateien in die Seite Beispiel: Syntax Anmerkungen: - Datei darf HTML- und PSP-Skriptelemente enthalten - Einbindung nur einmal zur Übersetzungszeit (mögliche Alternative: Einbindung durch Prozeduraufruf)

© Prof. T. Kudraß, HTWK Leipzig Spezielle Tags: Kommentare Funktion: erscheint nicht in der generierten Prozedur bzw. in den daraus erstellten HTML-Seiten Syntax Syntax Funktion: Kommentare, die in der HTML-Ausgabe erscheinen (normale HTML-Syntax) -- einzeiliger Kommentar /* mehrzeiliger Kommentar */ -- einzeiliger Kommentar /* mehrzeiliger Kommentar */ Syntax Funktion: Kommentare innerhalb eines PL/SQL-Blocks

© Prof. T. Kudraß, HTWK Leipzig Kompilieren der PL/SQL Server Page loadpsp [-replace] - user [include_file_name...] [... ] loadpsp [-replace] - user [include_file_name...] [... ] Syntax Beispiel loadpsp -replace - user timestamp.inc display_cust.psp loadpsp -replace - user timestamp.inc display_cust.psp Attribute: - replace: überschreibt Prozedur gleichen Namens - Login-Information - include-file_name: Dateien, die mittels include eingebunden werden - page1...: Name der PSP-Dateien, die kompiliert werden sollen

© Prof. T. Kudraß, HTWK Leipzig Parameterverarbeitung GET-Methode Beispiel: cust_order_items?ord_id=100&cust_id=100 cust_order_items?ord_id=100&cust_id=100 URL bei Submit:

© Prof. T. Kudraß, HTWK Leipzig Parameterverarbeitung POST-Methode Beispiel: cust_order_items cust_order_items URL bei Submit:

© Prof. T. Kudraß, HTWK Leipzig Parameterübergabe SELECT-Box wird durch Abfrage auf Tabelle Products mit Werten gefüllt, Zuordnung zum Parameter p_ID 2. Eingabeparameter: p_Name als Input-Textfeld in HTML-Formular Eingabe:...

© Prof. T. Kudraß, HTWK Leipzig Fehlerbehandlung - Verwendung von Errorpages erwartete vs. unerwartete Fehler erwarteter Fehler: NO_DATA_FOUND unerwarteter Fehler: 2 Produkte mit der gleichen ID Verwendung von ErrorPage in Page-Direktive zur Behandlung unerwarteter Fehler Nachteil: keine Parameterübergabe möglich (z.B. Fehlerzeitpunkt, Eingabeparameter) EXCEPTION WHEN OTHERS THEN htp.init; error; END; -- error: Name der Fehlerseite

© Prof. T. Kudraß, HTWK Leipzig Benutzerdefinierte Ausnahmebehandlung (Exceptions) -- Angabe der Fehlerseite... l_exception EXCEPTION; -- Deklaration der Ausnahme l_exception... IF (TO_DATE(arrival_date,'YYYY-MM-DD') <= SYSDATE) THEN RAISE l_exception; -- Datum liegt vor dem aktuellem Datum END IF; EXCEPTION WHEN l_exception THEN -- Test, ob es der vom Benutzer ausgelöste Fehler ist RAISE; -- Weiterleitung des Fehlers an übergeordnete Fehler- END; -- behandlung in Error_Page Ausgabe der Fehlermeldung -- wenn anderer Fehler, Ausgabe der Fehlermeldung...

© Prof. T. Kudraß, HTWK Leipzig Zusammenfassendes Beispiel: Ausgabe einer Kursliste Titel Leiter Tag Zeit von Zeit bis Ort Plätze <% FOR ds IN (SELECT Kurse.*, Kl_Name ||, || Kl_Vorname AS Kl_Fullname, Kl_ FROM Kurse LEFT JOIN Kursleiter ON Kurs_Leiter_ID_FK=Kl_ID ORDER BY Kurs_Name) LOOP%> Titel Leiter Tag Zeit von Zeit bis Ort Plätze <% FOR ds IN (SELECT Kurse.*, Kl_Name ||, || Kl_Vorname AS Kl_Fullname, Kl_ FROM Kurse LEFT JOIN Kursleiter ON Kurs_Leiter_ID_FK=Kl_ID ORDER BY Kurs_Name) LOOP%>

© Prof. T. Kudraß, HTWK Leipzig Zusammenfassendes Beispiel: Ausgabe einer Kursliste (Forts.) ||ds.Kurs_Name|| %> ||ds.Kl_Fullname|| %> ||ds.Kurs_Wochentag|| %> ||ds.Kurs_Zeitvon|| %> ||ds.Kurs_Zeitbis|| %> ||ds.Kurs_Ort|| %> || ds.Kurs_AktTeiln||/ ||ds.Kurs_MaxTeiln|| %> ||ds.Kurs_AktTeiln||/ ||ds.Kurs_MaxTeiln|| %> ||ds.Kurs_Name|| %> ||ds.Kl_Fullname|| %> ||ds.Kurs_Wochentag|| %> ||ds.Kurs_Zeitvon|| %> ||ds.Kurs_Zeitbis|| %> ||ds.Kurs_Ort|| %> || ds.Kurs_AktTeiln||/ ||ds.Kurs_MaxTeiln|| %> ||ds.Kurs_AktTeiln||/ ||ds.Kurs_MaxTeiln|| %>

© Prof. T. Kudraß, HTWK Leipzig Ausgabe der PSP-Beispielseite

© Prof. T. Kudraß, HTWK Leipzig Überblick Datenbank-Zugriff Datenbankzugriff mit PL/SQL Server Pages (PSP) Zugriff auf Metadaten Dynamisches SQL – Parametrisierung von Anfragen – Dynamischer Aufbau von WHERE-Bedingungen – Dynamische SELECT- und FROM-Klausel

© Prof. T. Kudraß, HTWK Leipzig Zugriff auf Metadaten in PL/SQL Zugriff auf Metadaten über Views des Oracle Data Dictionary = Sichten auf zugrundeliegende Systemtabellen, z.B. all_tab_columns, all_objects, all_tables Definierte Schnittstelle unabhängig von der DBMS-Version FOR ds IN ( SELECT table_name, column_name, data_type, data_length, nullable FROM all_tab_columns WHERE OWNER=THOMAS AND TABLE_NAME=STUDENTEN ORDER BY column_id ) LOOP htp.prn( Tabellenname: ||ds.Table_Name|| ); htp.prn( Spaltenname: ||ds.Column_Name|| ); htp.prn( Datentyp: ||ds.Data_Type|| ); htp.prn( Laenge: ||ds.data_length|| ); htp.prn( isNullable: ||ds.nullable|| ); END LOOP; %>

© Prof. T. Kudraß, HTWK Leipzig Zugriff auf Metadaten eines Result Set in PL/SQL Nutze das Package DBMS_SQL Parsen der SQL-Anweisung cur := dbms_sql.open_cursor; -- Parsen der Anfrage, DMBS_SQL.native wird für alle Oracle- -- Datenbanken > Version7 verwendet dbms_sql.parse(cur,SELECT * FROM studenten,DBMS_SQL.native); -- Ausführen der Anfrage i := dbms_sql.execute(cur); Zugriff auf Metadaten des Resultset dbms_sql.describe_columns(cur, spaltenanzahl, ds); type desc_rec is record ( col_type BINARY_INTEGER := 0, col_max_len BINARY_INTEGER := 0, col_name VARCHAR2(32) :=, col_null_ok BOOLEAN := TRUE);

© Prof. T. Kudraß, HTWK Leipzig Zugriff auf Metadaten eines Result Set in PL/SQL (Forts.) Ausgabe der Metadaten -- hole ersten Datensatz rec := ds.first; IF (rec is not null) THEN LOOP htp.prn( Spaltenname: ||ds(rec).col_name || ); htp.prn( Datentyp: ||ds(rec).col_type || ); htp.prn( Laenge: ||ds(rec).col_max_len|| ); IF (ds(rec).col_null_ok) THEN htp.prn( isNullable: true ); ELSE htp.prn( isNullable: false ); END IF; htp.prn( ); -- naechster Datensatz rec := ds.next(rec); EXIT WHEN (rec is null); END LOOP; END IF;

© Prof. T. Kudraß, HTWK Leipzig Zugriff auf Metadaten in JDBC (Datenbank) Klasse DatabaseMetaData enthält Informationen über das spezifische DBMS, z.B. – Datenbank-Version – maximale Zeichenkettenlänge für Bezeichner – unterstützte Funktionen (z.B. EXISTS-Subquery) – unterstützte Datentypen Beispiel DatabaseMetaData md = conn.getMetaData(); ResultSet rset = md.getTables(null,"THOMAS",null, null); while (rset.next()) { out.println("Schema: "+rset.getString("TABLE_SCHEMA")+", "); out.println("Tabellenname: " + rset.getString("TABLE_NAME")+" "); } Schema: THOMAS, Tabellenname: KURSE Schema: THOMAS, Tabellenname: KURSLEITER...

© Prof. T. Kudraß, HTWK Leipzig Zugriff auf Metadaten in JDBC (ResultSet) Klasse ResultSetMeta Data enthält Informationen über das Ergebnis einer Anfrage, z.B. – Anzahl Spalten – Spaltenname und Datentyp – Eigenschaften wie Zulässigkeit von Nullwerten Beispiel Statement stmt = conn.createStatement (); ResultSet rsetQuery = stmt.executeQuery ("SELECT * FROM Kurse ORDER BY Kurs_Name"); ResultSetMetaData rsmetadata = rsetQuery.getMetaData(); int spalten = rsmetadata.getColumnCount(); for (int i=1;i<=spalten;i++) { out.println("Spaltenname: "+rsmetadata.getColumnName(i)+" "); out.println("Datentyp: "+rsmetadata.getColumnType(i)+" "); out.println("Laenge: "+rsmetadata.getPrecision(i)+" "); out.println("isNullable: "+rsmetadata.isNullable(i)+" "); }

© Prof. T. Kudraß, HTWK Leipzig Überblick Datenbank-Zugriff Datenbankzugriff mit PL/SQL Server Pages (PSP) Zugriff auf Metadaten Dynamisches SQL – Parametrisierung von Anfragen – Dynamischer Aufbau von WHERE-Bedingungen – Dynamische SELECT- und FROM-Klausel

© Prof. T. Kudraß, HTWK Leipzig Unterstützung dynamischer Anfragen Dynamische Belegung von Werten in der WHERE-Klausel (durch Parametrisierung) Dynamischer Aufbau der WHERE-Bedingung (d.h. variable Spalten) Dynamischer Aufbau der zu selektierenden Spalten (SELECT-Liste) bzw. Tabellen (FROM-Klausel)

© Prof. T. Kudraß, HTWK Leipzig Dynamische Zusammenstellung einer Anfrage Ansatz 1: Nutzung von Zeichenkettenfunktionen in der jeweiligen Sprache Ansatz 2: Verwendung des Oracle-Pakets DBMS_SQL Anwendungsbeispiel: Dynamische Anzeige von Studentendaten mit vorgegebener Matrikel-Nr. und vom Benutzer wählbarer Spalten

© Prof. T. Kudraß, HTWK Leipzig Anwendungsbeispiel

© Prof. T. Kudraß, HTWK Leipzig Realisierung mit DBMS_SQL Package in PL/SQL [...] Matrikelnummer: Name <input type=checkbox name="spalten" value="stud_name"> [...] Liste der Checkboxen in HTML

© Prof. T. Kudraß, HTWK Leipzig Realisierung mit DBMS_SQL Package in PL/SQL (2) Erstellung und Ausführung der dynamischen SQL- Anweisung in PSP Programm Speichere die Namen aller selektierten Spalten in einer Zeichenkette FOR i IN 1..spalten.count LOOP IF (i=spalten.count) THEN spalten_all := spalten_all || spalten(i); ELSE spalten_all := spalten_all || spalten(i) ||,; END IF; END LOOP;

© Prof. T. Kudraß, HTWK Leipzig Realisierung mit DBMS_SQL Package in PL/SQL (3) c := dbms_sql.open_cursor; Öffnen des Cursors für weitere Ausführung der dynam. Anfrage DBMS_SQL.PARSE(c, SELECT ||spalten_all|| FROM studenten WHERE stud_matrikel = :matrikel, dbms_sql.native); DBMS_SQL.BIND_VARIABLE(c, :matrikel, matrikel); Parsen der Anfrage und Parameterbindung Definiere eine Spalte für jede selektierte Spalte im Cursor FOR i IN 1..spalten.count LOOP DBMS_SQL.DEFINE_COLUMN(c, i, value_string, 30); END LOOP;

© Prof. T. Kudraß, HTWK Leipzig Realisierung mit DBMS_SQL Package in PL/SQL (4) DBMS_SQL.execute(c); [...] FOR i IN 1..spalten.count LOOP htp.print( ||spalten(i)|| ); END LOOP; Ausführung der Anfrage – Ausgabe des Tabellenkopfes Hinweis: Neben DBMS_SQL auch native dynamic SQL in Oracle verfügbar

© Prof. T. Kudraß, HTWK Leipzig Realisierung mit DBMS_SQL Package in PL/SQL (5) Lese jede Ergebniszeile mittels ( DBMS_SQL.FETCH_ROWS ) Pro Zeile: Lese alle Spaltenwerte (Out-Param value_string ) LOOP IF DBMS_SQL.FETCH_ROWS(c)>0 THEN htp.print( ); FOR i IN 1..spalten.count LOOP DBMS_SQL.COLUMN_VALUE(c, i, value_string); htp.print( ||value_string|| ); END LOOP; htp.print( ); ELSE exit; END IF; END LOOP; -- Nach Ergebnisausgabe: Cursor schliessen DBMS_SQL.CLOSE_CURSOR(c);

© Prof. T. Kudraß, HTWK Leipzig Transaktionsunterstützung Autocommit-Modus – bedeutet: Jedes SQL-Statement als individuelle Transaktion behandelt – neue Connections sind im Autocommit-Modus – Ausschalten des Autocommit-Modus JDBC: conn.setAutoCommit(false) – Transaktionskontrolle ohne Autocommit-Modus JDBC: conn.commit() conn.rollback()