Eine Anwendung kann auf verschiedene Weise mit einer lokalen SQL-Datenbank arbeiten und darauf zugreifen. Der Anwendungscode kann auf unterschiedliche Arten organisiert werden, die Reihenfolge und Zeitgebung der Ausführung von Operationen kann variiert werden usw. Die gewählten Techniken können sich auf die Entwicklung der Anwendung auswirken. Sie beeinflussen zum Beispiel, wie einfach oder komplex es ist, die Anwendung in späteren Updates zu ändern. Außerdem können sie sich auf die Leistung der Anwendung aus Benutzerperspektive auswirken.
Verteilen von vorab gefüllten Datenbanken
Wenn Sie in Ihrer AIR-Anwendung eine lokale SQL-Datenbank verwenden, erwartet die Anwendung eine Datenbank mit einer bestimmten Struktur der Tabellen, Spalten usw. Einige Anwendungen benötigen auch bestimmte bereits in die Datenbankdatei eingetragene Daten. Eine Möglichkeit, sicherzustellen, dass die Datenbank die richtige Struktur aufweist, besteht darin, die Datenbank innerhalb des Anwendungscodes zu erstellen. Beim Laden überprüft die Anwendung, ob ihre Datenbankdatei an einem bestimmten Speicherort vorhanden ist. Wenn die Datei nicht vorhanden ist, führt die Anwendung eine Reihe von Befehlen aus, um die Datenbankdatei zu erstellen, die Datenbankstruktur zu erstellen und die Tabellen mit Daten zu füllen.
Der Code, mit dem die Datenbank und ihre Tabellen erstellt werden, ist häufig komplex. Meistens wird er nur einmal im Installationszeitraum der Anwendung verwendet, aber er trägt doch dazu bei, dass Größe und Komplexität der Anwendung zunehmen. Als Alternative zum programmgesteuerten Erstellen der Datenbank, der Struktur und der Daten können Sie auch eine vorab mit Daten gefüllte Datenbank zusammen mit Ihrer Anwendung verteilen. Um eine vordefinierte Datenbank zu verteilen, schließen Sie die Datenbankdatei in das AIR-Paket der Anwendung mit ein.
Wie alle Dateien im AIR-Paket wird eine mitgelieferte Datenbankdatei im Anwendungsverzeichnis installiert (in dem Verzeichnis, dass durch die
File.applicationDirectory
-Eigenschaft angegeben wird). Dateien in diesem Verzeichnis sind jedoch schreibgeschützt. Verwenden Sie die Datei aus dem AIR-Paket deshalb als „Vorlage“ für die Datenbank. Wenn der Benutzer die Anwendung zum ersten Mal ausführt, kopieren Sie die Originaldatenbankdatei in das
Verweisen auf das Anwendungsspeicherverzeichnis
des Benutzers (oder an einen anderen Speicherort) und verwenden Sie diese Datenbank in der Anwendung.
Empfohlene Verfahren für die Arbeit mit SQL-Datenbanken
Nachstehend sind einige Techniken aufgeführt, mit denen Sie die Leistung, die Sicherheit und die Verwaltbarkeit Ihrer Anwendung verbessern können, wenn Sie mit SQL-Datenbanken arbeiten.
Erstellen Sie Datenbankverbindungen vorab
Auch wenn Ihre Anwendung beim ersten Laden keine Anweisungen ausführt, instanziieren Sie ein SQLConnection-Objekt und rufen Sie seine
open()
- oder
openAsync()
-Methode schon im Voraus auf (zum Beispiel nach dem Starten der Anwendung), um Verzögerungen beim Ausführen von Anweisungen zu vermeiden. Lesen Sie dazu
Herstellen von Verbindungen mit Datenbanken
.
Verwenden Sie Datenbankverbindungen mehrmals
Wenn Sie während der Ausführung der Anwendung auf eine bestimmte Datenbank zugreifen, behalten Sie einen Verweis auf die SQLConnection-Instanz und verwenden Sie sie während der Ausführung der Anwendung immer wieder, anstatt die Verbindung zu schließen und wieder zu öffnen. Lesen Sie dazu
Herstellen von Verbindungen mit Datenbanken
.
Bevorzugen Sie den asynchronen Ausführungsmodus
Beim Schreiben von Code für den Datenzugriff sind manche Entwickler versucht, Operationen synchron statt asynchron auszuführen, da der Code für synchrone Operationen häufig kürzer und weniger komplex ist. Wie unter
Verwenden von synchronen und asynchronen Datenbankoperationen
beschrieben, können synchrone Operationen die Leistung auf eine Weise beeinträchtigen, die auch vom Benutzer wahrgenommen wird und dessen Meinung über die Anwendung negativ beeinflussen kann. Wie lange die Ausführung einer einzelnen Anweisung dauert, richtet sich nach der Art der Operation und besonders nach der involvierten Datenmenge. Eine SQL-
INSERT
-Anweisung, mit der einer Datenbank nur eine einzelne Zeile hinzugefügt wird, benötigt weniger Zeit als eine
SELECT
-Anweisung, mit der Tausende von Datenzeilen abgerufen werden. Wenn Sie mehrere Operationen im synchronen Modus ausführen, sind die Operationen normalerweise verflochten. Auch wenn die einzelnen Operationen jeweils schnell ausgeführt werden, bleibt die Anwendung jedoch stehen, bis alle synchronen Operationen abgeschlossen sind. Im Ergebnis kann es insgesamt so lange dauern, bis mehrere verflochtene Operationen ausgeführt sind, dass die Anwendung zum Stillstand oder sogar Absturz kommt.
Verwenden Sie deshalb vorzugsweise asynchrone Operationen, besonders wenn die Operationen viele Datenzeilen betreffen. Wie Sie große Ergebnissätze von
SELECT
-Anweisungen aufteilen können, wird unter
Abrufen von SELECT-Ergebnissen in Teilen
beschrieben. Dieses Verfahren kann jedoch nur im asynchronen Ausführungsmodus verwendet werden. Verwenden Sie synchrone Operationen nur dann, wenn Sie bestimmte Funktionen mit der asynchronen Programmierung nicht erreichen können, nachdem Sie die Leistungseinschränkungen für die Benutzer in Erwägung gezogen und nachdem Sie die Anwendung getestet haben, sodass Sie wissen, wie die Leistung der Anwendung betroffen ist. Der Code für die asynchrone Ausführung kann komplexer sein. Bedenken Sie jedoch, dass Sie diesen Code nur einmal schreiben müssen, die Benutzer der Anwendung ihn jedoch – schnell oder langsam – immer wieder verwenden müssen.
In einigen Fällen, wenn Sie eine separate SQLStatement-Instanz für jede auszuführende SQL-Anweisung verwenden, werden mehrere SQL-Operationen in eine Warteschlange gestellt, sodass der asynchrone Code mehr dem synchronen Code ähnelt. Lesen Sie dazu
Informationen zum asynchronen Ausführungsmodell
.
Verwenden Sie separate SQL-Anweisungen und ändern Sie nicht die text-Eigenschaft der SQLStatement-Instanz
Erstellen Sie für jede SQL-Anweisung, die in einer Anwendung mehrmals ausgeführt wird, eine separate SQLStatement-Instanz für jede SQL-Anweisung. Verwenden Sie diese SQLStatement-Instanz jedes Mal, wenn dieser SQL-Befehl ausgeführt wird. Angenommen, Sie erstellen eine Anwendung mit vier verschiedenen SQL-Operationen, die mehrmals ausgeführt werden. In diesem Fall erstellen Sie vier separate SQLStatement-Instanzen und rufen jeweils die
execute()
der Anweisung auf, um sie auszuführen. Verwenden Sie nicht eine einzelne SQLStatement-Instanz für alle SQL-Anweisungen, wobei Sie vor jedem Ausführen der Anweisung ihre
text
-Eigenschaft neu definieren müssen.
Verwenden Sie Anweisungsparameter
Arbeiten Sie mit SQLStatement-Parametern. Verwenden Sie niemals Benutzereingaben im Text der Anweisung. Sie erhöhen die Sicherheit Ihrer Anwendung, indem Sie Parameter verwenden, da so die Möglichkeit von SQL-Injection-Angriffen verhindert wird. Auf diese Weise können Sie in Abfragen Objekte verwenden (statt lediglich SQL-Literalwerte). Anweisungen werden damit außerdem effizienter ausgeführt, da sie mehrmals verwendet werden können, ohne dass sie bei jeder Ausführung neu kompiliert werden müssen. Weitere Informationen finden Sie unter
Verwenden von Parametern in Anweisungen
.
|
|
|