Adobe Air (wiwobooks.com Release)
Datenbankverbindung So geht es
Das nachfolgende Beispiel zeigt den Ablauf einer Transaktion vereinfacht für synchronen Zugriff in Pseudocode:
import flash.data.SQLConnection;
import flash.data.SQLStatement;
import flash.errors.SQLError;
try {
myDBConn.begin(); // myDBConn ist bereits geöffnet
var stmt1:SQLStatement = new SQLStatement();
stmt1.sqlConnection = myDBConn;
stmt1.text = "INSERT INTO some_table (…) VALUES (…)"; stmt1.execute();
var stmt2:SQLStatement = new SQLStatement();
stmt2.sqlConnection = myDBConn;
stmt2.text = "UPDATE some_table SET … WHERE …";
stmt3.execute();
// evtl. weitere Abfragen
myDBConn.commit();
}
catch(e:SQLError) {
// Fehlerbehandlung
}
// weiterer Code zum Auswerten von Daten
Listing 13.14 Beispiel: Transaktion ausführen (Pseudocode)
13.7.2 Transaktion abbrechen
Wenn innerhalb der Transaktion etwas schiefgeht, können die bisher durchgeführten Änderungen der laufenden Transaktion mithilfe der SQLConnection - Instanzmethode rollback() rückgängig gemacht werden.
Lösungsweg
1. Bei asynchronem Zugriff: Registrieren von Ereignis-Listenern für SQLEvent.BEGIN und SQLErrorEvent.ERROR
SQLConnection -Instanzmethode begin() 2. Aufruf der
3. Innerhalb des bzw. beginnend im Ereignis-Listener für SQLEvent.BEGIN (asynchron) oder nach Aufruf der begin() -Methode im try…catch -Block (synchron): Durchführen einer oder mehrerer Datenbankabfragen mithilfe SQLStatement -Instanzen
4. Abfangen eines Fehlers innerhalb des Ereignis-Listeners für SQLErrorEvent.ERROR (asynchron) bzw. im try…catch -Block (synchron) 5. Bei asynchronem Zugriff: Registrieren von Event-Listener für SQLEvent.ROLLBACK
6. Aufruf der SQLConnection -Instanzmethode rollback()
7. Bearbeiten von Erfolgs- oder Fehlerereignissen der Rollback-Operation in den Ereignis-Listenern (asynchron) oder im try…catch -Block
Voraussetzung
Geöffnete Datenbankverbindung
So geht es
Das nachfolgende Pseudocode-Beispiel für synchronen Zugriff erweitert das vorhergehende um die in fett dargestellte Zeile zum Abbruch der Transaktion:
import flash.data.SQLConnection;
import flash.data.SQLStatement;
import flash.errors.SQLError;
try {
myDBConn.begin(); // myDBConn ist bereits geöffnet
var stmt1:SQLStatement = new SQLStatement();
stmt1.sqlConnection = myDBConn;
stmt1.text = "INSERT INTO some_table (…) VALUES (…)"; stmt1.execute();
var stmt2:SQLStatement = new SQLStatement();
stmt2.sqlConnection = myDBConn;
stmt2.text = "UPDATE some_table SET … WHERE …"; stmt3.execute();
// evtl. weitere Abfragen
myDBConn.commit();
}
catch(e:SQLError) {
myDBConn.rollback();
// weitere Fehlerbehandlung
}
// weiterer Code zum Auswerten von Daten
Listing 13.15 Beispiel: Transaktion ausführen (Pseudocode)
13.8 Mehrere Datenbanken verwenden
AIR bietet die Möglichkeit, dass Sie mehrere Datenbankdateien mit einer einzigen SQLConnection -Instanz verwenden. Ob es eine gute Idee ist, die Daten Ihrer Anwendung auf mehrere Datenbankdateien zu verteilen, müssen Sie abhängig von Ihrer Anwendung entscheiden. Es kann jedoch auch vorkommen, dass Sie eine fremde Datenbank in Ihre Anwendung einbeziehen müssen. Zwar können Sie auch mehrere SQLConnection -Instanzen erstellen, wenn Sie auf mehrere Datenbankdateien zugreifen wollen, der wahre Vorteil der Möglichkeit, mehrere Datenbanken in einer SQLConnection -Instanz zu erstellen, zeigt sich jedoch bei datenbankübergreifenden Statements und Transaktionen. Sie können alle Datenbanken, die Sie mit einer SQLConnection -Instanz geöffnet oder an diese angehängt haben, nebeneinander in Abfragen und Transaktionen verwenden. Bei Transaktionen gilt das Gleiche wie bei Transaktionen einer einzigen Datenbank: Wenn eine Teilabfrage der Transaktion in einer der Datenbanken fehlschlägt, können Sie den vor dem Beginn der Transaktion herrschenden Zustand für alle Datenbanken wiederherstellen. So verhindern Sie, dass eine der angehängten Datenbanken in einem fehlerhaften oder nicht abgeschlossenen Zustand verbleibt. Sie können in einer einzelnen SQLConnection -Instanz bis zu zehn Datenbanken ansprechen.
13.8.1 Zusätzliche Datenbank anhängen
Das Anhängen einer weiteren Datenbankdatei geschieht im Kontext einer geöffneten SQLConnection -Instanz. Jede angehängte Datenbank wird mit einem einzigartigen Bezeichner versehen, über den Sie die jeweilige Datenbank in Abfragen referenzieren können. Die ursprünglich geöffnete Datenbank behält dabei stets den Bezeichner main .
Lösungsweg
1. Öffnen
Weitere Kostenlose Bücher