Unsere Datenschutzrichtlinie wird in Kürze aktualisiert. Bitte sehen Sie sich die Vorschau an.

Java: Datenbankprogrammierung

Transaktion

Testen Sie unsere 2016 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Eine Transaktion beinhaltet mehrere unterschiedliche Datenbankanweisungen, welche ausschließlich in Kombination miteinander ausgeführt werden sollten.
05:56

Transkript

Wir widmen uns in diesem Video dem Thema der so genannten Transaktionen. Das sind mehrere Datenbank-Anweisungen, die nur zusammen sinnvoll sind. Zumindest sollten es in der Regel mehrere Datenbank-Anweisungen sein. Sie bezeichnen einen Gesamtvorgang und den bezeichnet man als Transaktion. Sie sehen hier eine Datenbank, eine MySQL-Datenbank mit einer leeren Tabelle trans. Diese Struktur ist ganz einfach. Wir haben zwei Werte und die sind vom Typ smallint. Das heißt, der Werte-Bereich ist ziemlich eingeschränkt, so etwa bei 32.000 und ein paar zerquetschten ist Schluss. Die wollen wir aus JAVA heraus füllen. Nun sehen Sie hier ein Java-Programm mit einem Prepared Statement. Das heißt, wir haben hier ein Insert-Befehl und für die beiden Felder, die wir in der Datenbank haben wert1 und wert2, können hier Werte eingesetzt werden. Und wir setzten hier für den ersten Wert, den wert1 und für den zweiten Wert, wert2. Das geht problemlos. Dann führen wir dieses preparedStatement mit executeUpdate aus. Dann setzten wir für dieses vorbereitete Statement für den ersten Wert, den Wert 10 und für den zweiten Wert 200.000. Und das liegt außerhalb der Werte-Bereichs der für diesen Datentyp noch zulässig ist. Wir führen dieses Programm mal aus. Und Sie kriegen eine entsprechende Meldung Out of Rangevalue for column 'wert2' Das ist jetzt nicht überraschend. Das Problem ist allerdings, dass das erste Statement bereits ausgeführt wurde. Das heißt, wenn wir jetzt anzeigen, sehen Sie,hier gibt es einmal 1, 2 als Datensatz Sie müssen sich klar machen, dass das jetzt nicht das Problem ist. Sondern das Problem ist, dass wir eine Situation simulieren wollen, wo nur beide Anweisungen zusammen sinnvoll sind. Das ist jetzt natürlich mit diesen einfachen Zahlen wirklich nur eine primitive Demonstration. Aber, Sie können sich vorstellen, dass diese so genannte Transaktion aus zwei Schritten bestanden hat. Und der erste hat geklappt. Der ist aber auf der Datenbank auch durchgeführt worden. Und der zweite hat eben nicht geklappt. Damit haben wir einen inconsistent Zustand Wir müssen also in irgendeiner Form jetzt die Datenbank wieder zurücksetzten. Und das geht hier bei dieser Technik so erst mal nicht. Zurücksetzten geht folgendermaßen. Ich leere die Tabelle wieder, oder leere diesen Datensatz. Aber das ist eben ein manueller Vorgang und der sollte so natürlich nicht von Hand durchgeführt werden müssen. Das muss automatisch geschehen, wenn eine Transaktion schief geht. Und das können wir wirklich auch direkt aus Java heraus festlegen. Betrachten wir diese Abwandlung von diesem Beispiel. Wir haben hier eine Methode, die heißt SetAutoCommit. Und die wird auf unserem Connection- Objekt auf FALSE gesetzt. Damit wird nicht automatisch der Commit, sprich das Abschicken der Statements ausgeführt. Sondern wir müssen das selbst machen - bewusst. Damit beginnen wir quasi einen Block an Anweisungen festlegen, die zusammengehören Und bis zu diesem Zeitpunkt, wo wir die Commit-Methode ausführen, wird auf der Datenbank selbst noch nichts konkret passieren. Zu mindestens nicht dauerhaft. Wenn jetzt also eine Exception ausgelöst wird, dann können wir auf unseren Connection- Objekt eine Methode rollback aufrufen. Und die gesamte Transaktion wird zurück abgewickelt. Schauen wir uns das mal an. Auch das Beispiel lasse ich laufen. Und dann kommt die Meldung: Connection Rollback... Es ist offensichtlich hier eine SQL-Exception ausgeworfen worden. Der Rollback wurde ausgeführt, sonst würde die Meldung danach nicht kommen, wenn das eine Exception ausgelöst hätte. Und wir schauen uns an, was auf der Datenbank passiert ist. Wir lassen uns die Werte anzeigen und es steht nichts drin. Die gesamte Transaktion wurde abgebrochen. Wenn hingegen jetzt hier vernünftige Werte drin stehen, sprich diese Schritte werden problemlos durchgeführt, dann wird das auch in der Datenbank entsprechend zu sehen sein. Das heißt, diese gesamte Transaktion ist als Block fehlerfrei ausgeführt worden Um es zusammen zu fassen, eine Transaktion ist immer dann sinnvoll, wenn mehrere Schritte, mehrere Datenbank-Anweisungen nur zusammen einen sinnvollen Ablauf ergeben. Und sofern eine dieser Anweisungen einen Fehler produziert, muss die gesamte Aktion abgebrochen und zurückgesetzt werden. Dann arbeitet man mit Transaktionen. Die entscheidenden Punkte sind, dass man das automatische Commiten der Anweisung unterbindet, mit: setAutoCommit = FALSE. Dass man dann manuell eine Methode Commit aufruft und im Fehlerfall bei einer SQL- Exception eine Methode Rollback aufruft, um diese gesamte Transaktion rückgängig zu machen. Und das setAutoCommit bis zum commit spezifiziert quasi einen Block an SQL-Anweisungen, die zusammengehören.

Java: Datenbankprogrammierung

Machen Sie sich in diesem Training mit den Grundlagen zu Datenbanken im Allgemeinen vertraut, um anschließend mit Java ein einfaches, erstes Datenbankbeispiel zu programmieren.

2 Std. 13 min (29 Videos)
Derzeit sind keine Feedbacks vorhanden...
 
Exklusiv für Abo-Kunden
Erscheinungsdatum:11.03.2014

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!