Lokale SQL-Datenbanken

Adobe AIR 1.0 und höher

Eine Kurzbeschreibung und Codebeispiele zur Verwendung von SQL-Datenbanken finden Sie in den folgenden Kurzanleitungen in der Adobe Developer Connection:

Adobe AIR enthält eine SQL-basierte relationale Datenbank-Engine, die in der Laufzeitumgebung ausgeführt wird. Daten werden lokal in Datenbankdateien auf dem Computer gespeichert, auf dem die AIR-Anwendung ausgeführt wird (zum Beispiel auf der Festplatte des Computers). Da die Datenbank lokal ausgeführt wird und Datendateien lokal gespeichert werden, kann eine Datenbank von der AIR-Anwendung genutzt werden, auch wenn keine Netzwerkverbindung besteht. Somit stellt die lokale SQL-Datenbank-Engine der Laufzeitumgebung eine praktische Möglichkeit zum Speichern permanenter lokaler Anwendungsdaten dar, besonders, wenn Sie bereits Erfahrung im Umgang mit SQL und relationalen Datenbanken haben.

Verwendungszwecke lokaler Datenbanken

Die lokale SQL-Datenbankfunktion in AIR kann für jeden Zweck eingesetzt werden, für den Sie Anwendungsdaten auf dem lokalen Computer des Benutzers speichern möchten. Adobe AIR beinhaltet mehrere Mechanismen zum lokalen Speichern von Daten, die unterschiedliche Vorteile haben. Nachstehend sind einige Einsatzmöglichkeiten einer lokalen SQL-Datenbank in AIR-Anwendungen aufgeführt:

  • Bei einer datenorientierten Anwendung (zum Beispiel ein Adressbuch) kann eine Datenbank zum Speichern der Hauptanwendungsdaten verwendet werden.

  • Bei einer dokumentorientierten Anwendung, in der Benutzer Dokumente zum Speichern und ggf. Freigeben erstellen, kann jedes Dokument als eine Datenbankdatei an einem vom Benutzer festgelegten Speicherort gespeichert werden. (Beachten Sie jedoch, dass jede AIR-Anwendung die Datenbankdatei öffnen kann, wenn die Datenbank nicht verschlüsselt ist. Die Verschlüsselung wird für möglicherweise vertrauliche Dokumente empfohlen.)

  • Bei einer netzwerkfähigen Anwendung kann eine Datenbank zur Zwischenspeicherung von Anwendungsdaten oder zum temporären Speichern verwendet werden, wenn keine Netzwerkverbindung verfügbar ist. Sie könnten einen Mechanismus zum Synchronisieren der lokalen Datenbanken mit dem Netzwerkdatenspeicher erstellen.

  • Bei jeder beliebigen Anwendung lassen sich mit einer Datenbank Anwendungseinstellungen der einzelnen Benutzer, zum Beispiel Benutzeroptionen, oder Anwendungsinformationen wie Fenstergröße und -position speichern.

AIR-Datenbanken und Datenbankdateien

Eine einzelne lokale Adobe AIR-SQL-Datenbank wird als eine Datei im Dateisystem des Computers gespeichert. Die Laufzeitumgebung enthält die SQL-Datenbank-Engine, die das Erstellen und Strukturieren von Datenbankdateien sowie das Bearbeiten und Abrufen von Dateien aus einer Datenbankdatei verwaltet. Die Laufzeitumgebung legt nicht fest, wie oder wo Datenbankdaten im Dateisystem gespeichert werden; stattdessen wird jede Datenbank vollständig in einer Datei gespeichert. Sie geben den Speicherort im Dateisystem an, an dem die Datenbankdatei gespeichert wird. Eine einzelne AIR-Anwendung kann auf eine oder auf viele separate Datenbanken (d. h. Datenbankdateien) zugreifen. Da die Laufzeitumgebung jede Datenbank als einzelne Datei im Dateisystem speichert, können Sie Ihre Datenbanken so speichern, wie es für Ihre Anwendung und die Dateizugriffsbeschränkungen des Betriebssystems erforderlich ist. Jeder Benutzer kann eine separate Datenbankdatei für seine jeweiligen Daten haben, oder alle Benutzer der Anwendung auf einem Computer greifen auf eine Datenbankdatei mit freigegebenen Daten zu. Da sich die Daten lokal auf einem einzelnen Computer befinden, werden die Daten nicht automatisch für Benutzer auf anderen Computern freigegeben. Die lokale SQL-Datenbank-Engine bietet keine Möglichkeit, SQL-Anweisungen für eine Remote-Datenbank oder serverbasierte Datenbank auszuführen.

Relationale Datenbanken

Eine relationale Datenbank ist ein Mechanismus zum Speichern (und Abrufen) von Daten auf einem Computer. Daten sind in Tabellen organisiert: Zeilen repräsentieren Datensätze oder Elemente; Spalten (manchmal „Felder“ genannt) teilen jeden Datensatz in einzelne Werte. Eine Adressbuchanwendung könnte zum Beispiel die Tabelle „Freunde“ enthalten. Jede Zeile in der Tabelle steht für einen Freund, der in der Datenbank gespeichert ist. Die Spalten der Tabelle repräsentieren Daten wie Vorname, Nachname, Geburtstag usw. Für jede Zeile mit einem Freund in der Tabelle speichert die Datenbank einen separaten Wert für jede Spalte.

Relationale Datenbanken eigenen sich für die Speicherung komplexer Daten, wobei ein Element mit Elementen eines anderen Typs verknüpft ist – zu diesem in Relation steht. In einer relationalen Datenbank sollten alle Daten, die eine Eins-zu-viele-Beziehung haben (wobei ein einzelner Datensatz mit mehreren Datensätzen eines anderen Typs in Relation steht), auf verschiedene Tabellen verteilt werden. Wenn Sie zum Beispiel in der Adressbuchanwendung mehrere Telefonnummern für jeden Freund speichern möchten, ist dies eine Eins-zu-viele-Beziehung. Die Tabelle „Freunde“ enthält alle persönlichen Informationen für jeden Freund. Eine separate Tabelle „Telefonnummern“ enthält alle Telefonnummern für alle Freunde.

Zusätzlich zur Speicherung der Daten zu Freunden und Telefonnummern benötigt jede Tabelle Daten, um die Beziehung zwischen den beiden Tabellen festzuhalten, damit die Datensätze einzelner Freunde ihren Telefonnummern zugeordnet werden können. Diese Daten werden als ein Primärschlüssel bezeichnet – ein eindeutiger Bezeichner, der jede Zeile in einer Tabelle von anderen Zeilen in dieser Tabelle unterscheidet. Der Primärschlüssel kann ein „natürlicher Schlüssel“ sein, also eines der Datenelemente, die jeden Datensatz in einer Tabelle natürlich auszeichnen. In der Tabelle „Freunde“ können Sie zum Beispiel die Spalte mit dem Geburtsdatum als Primärschlüssel (als natürlichen Schlüssel) verwenden, wenn Sie wissen, dass alle Freunde ein anderes Geburtsdatum haben. Ist kein natürlicher Schlüssel vorhanden, können Sie eine separate Primärschlüsselspalte, zum Beispiel „Freund-ID“, erstellen. Anhand dieses künstlichen Werts kann die Anwendung die einzelnen Zeilen unterscheiden.

Mithilfe eines Primärschlüssels können Sie Beziehungen zwischen verschiedenen Tabellen herstellen. Angenommen, die Tabelle „Freunde“ hat eine Spalte „Freund-ID“, die eine eindeutige Nummer für jede Zeile (für jeden Freund) enthält. Die verwandte Tabelle „Telefonnummern“ kann mit zwei Spalten strukturiert werden; eine mit der „Freund-ID“ des Freundes mit einer bestimmten Telefonnummer, und eine mit der Telefonnummer. Auf diese Weise können alle Freunde, unabhängig von der Anzahl ihrer Telefonnummern, in der Tabelle „Telefonnummern“ gespeichert und mithilfe des Primärschlüssels „Freund-ID“ mit dem entsprechenden Freund verknüpft werden. Wenn ein Primärschlüssel aus einer Tabelle in einer verwandten Tabelle verwendet wird, um die Verbindung zwischen den Datensätzen anzugeben, wird der Wert in der verwandten Tabelle als „Fremdschlüssel“ bezeichnet. Im Gegensatz zu vielen anderen Datenbanken lässt die lokale Datenbank-Engine von AIR es nicht zu, dass Sie Beschränkungen für Fremdschlüssel erstellen. Dies sind Beschränkungen, die automatisch überprüfen, dass ein eingefügter oder aktualisierter Fremdschlüsselwert eine entsprechende Zeile in der Primärschlüsseltabelle hat. Fremdschlüsselbeziehungen sind ein wichtiger Bestandteil der Struktur einer relationalen Datenbank. Fremdschlüssel sollten verwendet werden, wenn Sie Beziehungen zwischen Tabellen in Ihren Datenbank erstellen.

Informationen zu SQL

SQL (Structured Query Language) wird mit relationalen Datenbanken verwendet, um Daten zu bearbeiten und abzurufen. SQL ist keine prozedurale Sprache, sondern eine beschreibende Sprache. Anstatt dem Computer Anweisungen zu geben, wie die Daten abzurufen sind, beschreibt eine SQL-Anweisung die Daten, die Sie erhalten möchten. Die Datenbank-Engine bestimmt, wie diese Daten abzurufen sind.

SQL wurde vom American National Standards Institute (ANSI) standardisiert. Die lokale SQL-Datenbank von Adobe AIR unterstützt den größten Teil des Standards SQL-92.

Genauere Beschreibungen der in Adobe AIR unterstützten SQL-Sprache finden Sie unter SQL-Unterstützung in lokalen Datenbanken .

Informationen zu SQL-Datenbankklassen

Wenn Sie in ActionScript 3.0 mit lokalen SQL-Datenbanken arbeiten, verwenden Sie Instanzen der folgenden Klassen aus dem flash.data-Paket:

Klasse

Beschreibung

flash.data.SQLConnection

Bietet Möglichkeiten zum Erstellen und Öffnen von Datenbanken (Datenbankdateien) sowie Methoden zum Ausführen von Operationen auf Datenebene und zum Steuern von Datenbanktransaktionen.

flash.data.SQLStatement

Stellt eine einzelne SQL-Anweisung (einen Befehl oder eine Abfrage) dar, die für eine Datenbank ausgeführt wird, und beinhaltet das Definieren des Anweisungstextes und das Festlegen der Parameterwerte.

flash.data.SQLResult

Ermöglicht das Abrufen von Informationen zu oder Ergebnissen aus der Ausführung einer Anweisung, zum Beispiel die Ergebniszeilen einer SELECT -Anweisung, die Anzahl der Zeilen, die von einer UPDATE - oder DELETE -Anweisung betroffen sind.

Um Schemainformationen zu erhalten, die die Struktur einer Datenbank beschreiben, verwenden Sie die folgenden Klassen aus dem flash.data-Paket:

Klasse

Beschreibung

flash.data.SQLSchemaResult

Dient als Container für Datenbankschemaergebnisse, die durch einen Aufruf der SQLConnection.loadSchema() -Methode generiert werden.

flash.data.SQLTableSchema

Stellt Informationen bereit, die eine einzelne Tabelle in einer Datenbank beschreiben.

flash.data.SQLViewSchema

Stellt Informationen bereit, die eine einzelne Ansicht in einer Datenbank beschreiben.

flash.data.SQLIndexSchema

Stellt Informationen bereit, die eine einzelne Spalte in einer Tabelle oder Ansicht in einer Datenbank beschreiben.

flash.data.SQLTriggerSchema

Stellt Informationen bereit, die einen einzelnen Auslöser in einer Datenbank beschreiben.

Andere Klassen im flash.data-Paket stellen Konstanten bereit, die mit der SQLConnection-Klasse und der SQLColumnSchema-Klasse verwendet werden:

Klasse

Beschreibung

flash.data.SQLConnection

Definiert eine Gruppe von Konstanten, die die möglichen Werte für den openMode -Parameter der Methoden SQLConnection.open() und SQLConnection.openAsync() darstellen.

flash.data.SQLColumnNameStyle

Definiert eine Gruppe von Konstanten, die die möglichen Werte für die SQLConnection.columnNameStyle -Eigenschaft darstellen.

flash.data.SQLTransactionLockType

Definiert eine Gruppe von Konstanten, die die möglichen Werte für den option-Parameter der SQLConnection.begin() -Methode darstellen.

flash.data.SQLCollationType

Definiert eine Gruppe von Konstanten, die die möglichen Werte für die SQLColumnSchema.defaultCollationType -Eigenschaft und den defaultCollationType -Parameter des SQLColumnSchema() -Konstruktors darstellen.

Zusätzlich repräsentieren die folgenden Klassen im flash.events-Paket die Ereignisse (und unterstützenden Konstanten), die Sie verwenden:

Klasse

Beschreibung

flash.events.SQLEvent

Definiert die Ereignisse, die eine SQLConnection- oder SQLStatement-Instanz auslöst, wenn eine ihrer Operationen erfolgreich ausgeführt wird. Jeder Operation ist eine Ereignistypkonstante zugewiesen, die in der SQLEvent-Klasse definiert ist.

flash.events.SQLErrorEvent

Definiert das Ereignis, das eine SQLConnection- oder SQLStatement-Instanz auslöst, wenn eine ihrer Operationen zu einem Fehler führt.

flash.events.SQLUpdateEvent

Definiert das Ereignis, das eine SQLConnection-Instanz auslöst, wenn Tabellendaten in einer der verbundenen Datenbanken als Ergebnis einer INSERT -, UPDATE - oder DELETE -Anweisung geändert werden.

Die folgenden Klassen im flash.errors-Paket stellen Informationen zu Fehlern bei Datenbankoperationen bereit:

Klasse

Beschreibung

flash.errors.SQLError

Stellt Informationen zu einem Fehler bei einer Datenbankoperation bereit, darunter die Operation, die ausgeführt werden sollte, sowie die Fehlerursache.

flash.errors.SQLErrorOperation

Definiert eine Gruppe von Konstanten, die die möglichen Werte für die operation -Eigenschaft der SQLError-Klasse darstellen. Diese Eigenschaft gibt an, welche Datenbankoperation zu dem Fehler geführt hat.

Synchrone und asynchrone Ausführungsmodi

Wenn Sie Code für die Arbeit mit einer lokalen SQL-Datenbank schreiben, geben Sie für Datenbankoperationen einen von zwei Ausführungsmodi an: asynchron oder synchron. Im Allgemeinen zeigen die Codebeispiele, wie Sie jeden Vorgang auf beide Arten ausführen, sodass Sie das für Sie am besten geeignete Beispiel verwenden können.

Im asynchronen Modus geben Sie der Laufzeitumgebung eine Anweisung und die Laufzeitumgebung löst ein Ereignis aus, wenn die angeforderte Operation abgeschlossen wurde oder fehlgeschlagen ist. Zunächst weisen Sie die Datenbank-Engine an, eine Operation auszuführen. Die Datenbank-Engine führt die Operation im Hintergrund aus, während die Anwendung weiterhin ausgeführt wird. Wenn die Operation abgeschlossen ist (oder wenn sie fehlschlägt), löst die Datenbank-Engine ein Ereignis aus. Ihr Code, der vom Ereignis ausgelöst wird, führt die nachfolgenden Operationen aus. Dieser Ansatz hat einen wichtigen Vorteil: die Laufzeitumgebung führt die Datenbankoperationen im Hintergrund aus, während der Hauptanwendungscode weiterhin ausgeführt wird. Auch wenn die Datenbankoperation längere Zeit dauert, wird die Anwendung weiter ausgeführt. Der Benutzer kann also mit der Anwendung interagieren, ohne dass der Bildschirm „einfriert“. Der Code für asynchrone Operationen kann komplexer sein als anderer Code. Diese Komplexität ist normalerweise dann gegeben, wenn mehrere voneinander abhängige Operationen zwischen verschiedenen Ereignis-Listener-Methoden aufgeteilt werden müssen.

Vom Konzept her ist es einfacher, Operationen als eine Folge von Schritten, also als eine Reihe synchroner Operationen, zu kodieren als eine Gruppe von Operationen auf verschiedene Ereignis-Listener-Methoden zu verteilen. Neben asynchronen Datenbankoperationen können Sie in Adobe AIR Datenbankoperationen auch synchron ausführen. Im synchronen Ausführungsmodus werden Operationen nicht im Hintergrund ausgeführt. Stattdessen werden sie in derselben Ausführungsabfolge wie der andere Anwendungscode ausgeführt. Sie weisen die Datenbank-Engine an, eine Operation auszuführen. Der Code stoppt dann an diesem Punkt, während die Datenbank-Engine die Operation ausführt. Wenn die Operation abgeschlossen wurde, wird die Ausführung mit der nächsten Codezeile fortgesetzt.

Ob Operationen asynchron oder synchron ausgeführt werden, wird auf der SQLConnection-Ebene festgelegt. Wenn Sie eine einzelne Datenbankverbindung verwenden, können Sie nicht bestimmte Operationen oder Anweisungen synchron ausführen, andere dagegen asynchron. Sie legen fest, ob eine SQLConnection im synchronen oder im asynchronen Ausführungsmodus operiert, indem Sie eine SQLConnection-Methode aufrufen, um die Datenbank zu öffnen. Wenn Sie SQLConnection.open() aufrufen, arbeitet die Verbindung im synchronen Ausführungsmodus; wenn Sie SQLConnection.openAsync() aufrufen, arbeitet die Verbindung im synchronen Ausführungsmodus. Nachdem eine SQLConnection-Instanz durch Aufruf von open() oder openAsync() mit einer Datenbank verbunden wurde, ist sie auf den synchronen oder asynchronen Ausführungsmodus festgelegt, solange Sie die Verbindung zur Datenbank nicht schließen und erneut öffnen.

Beide Ausführungsmodi haben ihre Vorteile. In den meisten Punkten ähneln sich die Ausführungsmodi, es gibt jedoch einige Unterschieden, die Sie bei der Arbeit mit den einzelnen Modi beachten sollten. Weitere Informationen zu diesem Themen sowie Vorschläge für die Arbeit in den beiden Modi finden Sie unter Verwenden von synchronen und asynchronen Datenbankoperationen .