Lokale SQL-DatenbankenAdobe 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 DatenbankenDie 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:
AIR-Datenbanken und DatenbankdateienEine 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 DatenbankenEine 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 SQLSQL (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-DatenbankklassenWenn Sie in ActionScript 3.0 mit lokalen SQL-Datenbanken arbeiten, verwenden Sie Instanzen der folgenden Klassen aus dem flash.data-Paket:
Um Schemainformationen zu erhalten, die die Struktur einer Datenbank beschreiben, verwenden Sie die folgenden Klassen aus dem flash.data-Paket:
Andere Klassen im flash.data-Paket stellen Konstanten bereit, die mit der SQLConnection-Klasse und der SQLColumnSchema-Klasse verwendet werden:
Zusätzlich repräsentieren die folgenden Klassen im flash.events-Paket die Ereignisse (und unterstützenden Konstanten), die Sie verwenden:
Die folgenden Klassen im flash.errors-Paket stellen Informationen zu Fehlern bei Datenbankoperationen bereit:
Synchrone und asynchrone AusführungsmodiWenn 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. |
|