Im neunten Teil zu Adobe AIR 1.0 geht es um das Thema SQL. AIR bietet die Möglichkeit, mit lokalen SQL-Datenbanken zu arbeiten. Die AIR-Runtime hat eine SQL-Engine, die auf der Open Source Technologie SQLite basiert.
In der lokalen Datenbank können z.B. Programmdaten, Benutzereinstellungen, Dokumente oder andere Arten von Daten gespeichert werden. Die SQL-Datenbank ist nichts anderes als eine Datei auf der Festplatte, in der die Daten abgelegt werden. Sie kann über ActionScript erstellt, befüllt und ausgelesen werden. Als Syntax werden dazu gewöhnliche SQL-Statements verwendet.
Das folgende AIR-Beispiel erstellt zuerst eine neue Datenbank (Der Einfachheit wegen wird diese auf dem Desktop gespeichert). Anschließend wird ein erster Eintrag in die Datenbank-Tabelle geschrieben. Über die Benutzeroberfläche kann man weitere Einträge hinzufügen und die vorhanden anzeigen lassen.
-
span style="color: #808080; font-style: italic;">/*
-
* :::::::::::: Neue Datenbank erstellen bzw. öffnen, falls vorhanden :::::::::::::::::::::
-
*/
-
-
// neue SQL Verbindung
-
// event listeners
-
// Wo wird SQL-Datenbank abgespeichert (->Desktop)
-
"DBSample.db");
-
-
// DB/Datei öffnen; wenn nicht vorhanden, neue Datei
-
// (Default ist immer SQLMode.CREATE, könnte also auch weggelassen werden)
-
"Datenbank erfolgreich erstellt""Fehler:""Details:"/*
-
* :::::::::::: Tabelle anlegen, falls sie nicht existiert :::::::::::::::::::::
-
*/
-
-
// neues Statement
-
// Statement mit der Datenbank-Verbindung verknüpfen
-
// Inhalt des SQL-Statements
-
"CREATE TABLE IF NOT EXISTS personen (" +
-
" id INTEGER PRIMARY KEY AUTOINCREMENT, " +
-
" vorname TEXT, " +
-
" nachname TEXT " +
-
")"// event listeners
-
// Statement ausführen
-
"Tabelle erstellt""Fehler:""Details:"/*
-
* :::::::::::: Initialer Eintrag :::::::::::::::::::::
-
*/
-
-
// Ersten Eintrag in die DB schreiben
-
"Max Mustermann");
-
-
-
/*
-
* :::::::::::: Daten nach Buttonklick einfüllen :::::::::::::::::::::
-
*/// create the SQL statement
-
// define the SQL text
-
"INSERT INTO personen (vorname) " +
-
"VALUES ('" + str + "')"// event listener
-
// statement ausführen
-
"INSERT statement succeeded""Eintrag erfolgreich hinzugefügt.""Fehler: ""\nDetails: "/* ::::::::::::::: Werte auslesen :::::::::::
-
*
-
*/// neues select statement
-
// dem statement die verbindung zuweisen
-
// statement festlegen
-
"SELECT vorname FROM personen";
-
-
// event listeners
-
// statement ausführen
-
// ergebnis ablegen
-
// anzahl der einträge
-
// Textfeld leeren
-
"";
-
-
// schleife
-
"\n";
-
-
}
-
}
15 Kommentare zum Beitrag "AIR: Lokale SQL-Datenbank verwenden"
Hier noch ein dazu passender Artikel von Christian Pfeil:
Mit Adobe AIR SQLite-Datenbanken erzeugen und verwalten
Hi Flo,
vielen Dank für den Hinweis auf meinen Artikel und für dein Feedback in meinem Blog. Ich verfolge deine Tutorials mit sehr viel Aufmerksamkeit und finde sie sehr übersichtlich und leicht nachzuvollziehen.
Kommst du zur FlashForum Konferenz dieses Jahr?
Grüße Christian
Hi Christian,
ja, ich bin dieses Jahr dabei :-)
http://ffk08.flashforum.de/speakers.php#plag
Guter Mann! Ich werde an deinem Vortrag teilnehmen und hoffe man sieht sich mal bei der Afterwork-Party ;-) Grüße Christian
Auf jeden Fall :-)
[…] Copy & Paste in die Zwischenablage Fenstergrößen verändern Taskleiste von Windows blinken lassen Drag & Drop Konfigurationsdatei in XML schreiben und Lesen Einsatz von SQLlite […]
Zu meiner Schande muss ich gestehen, dass ich nicht weiß, was ich mit dieser FLA-Datei tun muss. Ich entwickle AIR-Anwendungen bisher immer mit dem Flex Builder, deshalb stehe ich jetzt etwas wie der Ochs‘ vorm Tor.
Ich versuche gerade, etwas über lokale Datenbankzugriffe mit AIR in Erfahrung zu bringen, daher wollte ich dieses Code-Beispiel mal ausführen. Ich lade die FLA-Datei dazu in die Adobe-Flash-CS3-Entwicklungsumgebung, veröffentliche das Ganze mit F12, und erhalte leider nur diese Fehlermeldung:
Error: Error #3104: A SQLConnection must be open to perform this operation.
at Error$/throwError()
at flash.data::SQLStatement/checkAllowed()
at flash.data::SQLStatement/checkReady()
at flash.data::SQLStatement/execute()
at air_fla::MainTimeline/frame1()
Jemand eine Idee, an welcher Stelle da was anders gemacht werden muss?
Vielen Dank für jedwede Hilfe.
Hallo Christian,
die .fla Datei ist nur für Flash. In Flex kannst du nix damit anfangen :)
Du kannst gewöhnlicherweise (bis auf wenige Ausnahmen) aber den AS3-Code von Flash auch in Flex verwenden. Die Benutzeroberfläche müsstest du natürlich nachbauen und die Elemente mit den entsprechenden Instanznamen versehen.
Zu deinem Flashproblem kann ich aktuell leider nichts sagen. Normalerweise sollte es funktionieren, wenn du die .fla öffnest und Ctrl+Enter drückst. (Voraussetzung ist, dass die AIR-Erweiterung für Flash CS3 installiert ist.)
Vielleicht hat sich auch mit AIR 1.1 was geändert, glaube ich aber nicht. Dies kann ich gerade leider nicht nachprüfen, da ich unterwegs bin …
Hallo.
Vielen Dank für die Antwort.
Die Flash-Entwicklungsumgebung, die mir zur Verfügung steht, hat die AIR-Erweiterungen – trotzdem geht’s nicht (bzw. nur mit o.g. Fehler).
Ist aber nicht so schlimm; mittlerweile habe ich in Flex meinen eigenen asynchronen Zugriff auf die in AIR integrierte, lokale SQLite-Datenbank realisiert.
Aber falls mal Zeit ist, dem Fehler auf den Grund zu gehen, würde ich mich natürlich für das Ergebnis interessieren (bzw. bei mehr Zeit auch selbst forschen).
Hallo! Es scheint zu funktionieren, wenn man die DB schon erstellt hat. Jedoch funktioniert es bei mir nur unter XP und nicht unter Vista. Weiß jemand etwas darüber?
Kann ich leider nicht weiterhelfen, ich habe kein Vista …
habs rausgefunden…. ist eine Vista-Zugriffeinstellungssache (Benutzerkontensteuerung muss ausgeschaltet sein).
Also ich habe die Benutzerkontensteuerung ausgeschaltet, aber ich bekomme den selben Fehler…
Die Datei wird dann zwar angelegt, aber Sie bleibt leer
Hier ein kurzer Hinweis, wie man mehrere Werte per INSERT eintragen kann:
sqlStatement.text = "INSERT INTO setlists (setId,songId) VALUES ('"
+ setId + "','"
+ songId + "')";
Beim Löschen findet man so heraus, ob etwas gelöscht wurde:
var result:SQLResult = SQLStatement(event.currentTarget).getResult();
if (result.rowsAffected > 0) { //… es wurde Zeilen gelöscht
Schreibe einen Kommentar