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.

Adobe AIR SQL

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.

Actionscript:
  1. import flash.events.*;
  2. import flash.filesystem.File;
  3. import flash.data.*;
  4.  
  5.  
  6. /*
  7. * :::::::::::: Neue Datenbank erstellen bzw. öffnen, falls vorhanden :::::::::::::::::::::
  8. */
  9.  
  10. // neue SQL Verbindung
  11. var conn:SQLConnection = new SQLConnection();
  12.  
  13. // event listeners
  14. conn.addEventListener(SQLEvent.OPEN, openHandler);
  15. conn.addEventListener(SQLErrorEvent.ERROR, errorHandler);
  16.  
  17. // Wo wird SQL-Datenbank abgespeichert (->Desktop)
  18. var dbFile:File = File.desktopDirectory.resolvePath("DBSample.db");
  19.  
  20. // DB/Datei öffnen; wenn nicht vorhanden, neue Datei
  21. // (Default ist immer SQLMode.CREATE, könnte also auch weggelassen werden)
  22. conn.openAsync(dbFile, SQLMode.CREATE);
  23.  
  24.  
  25. function openHandler(event:SQLEvent):void {
  26.     trace("Datenbank erfolgreich erstellt");
  27. }
  28.  
  29. function errorHandler(event:SQLErrorEvent):void {
  30.     trace("Fehler:", event.error.message);
  31.     trace("Details:", event.error.details);
  32. }
  33.  
  34. /*
  35. * :::::::::::: Tabelle anlegen, falls sie nicht existiert :::::::::::::::::::::
  36. */
  37.  
  38. // neues Statement
  39. var createStatement:SQLStatement = new SQLStatement();
  40.  
  41. // Statement mit der Datenbank-Verbindung verknüpfen
  42. createStatement.sqlConnection = conn;
  43.  
  44. // Inhalt des SQL-Statements
  45. var sql:String =
  46.     "CREATE TABLE IF NOT EXISTS personen (" +
  47.     "    id INTEGER PRIMARY KEY AUTOINCREMENT, " +
  48.     "    vorname TEXT, " +
  49.     "    nachname TEXT " +
  50.     ")";
  51. createStatement.text = sql;
  52.  
  53. // event listeners
  54. createStatement.addEventListener(SQLEvent.RESULT, createResult);
  55. createStatement.addEventListener(SQLErrorEvent.ERROR, createError);
  56.  
  57. // Statement ausführen
  58. createStatement.execute();
  59.  
  60. function createResult(event:SQLEvent):void {
  61.     trace("Tabelle erstellt");
  62. }
  63.  
  64. function createError(event:SQLErrorEvent):void {
  65.     trace("Fehler:", event.error.message);
  66.     trace("Details:", event.error.details);
  67. }
  68.  
  69.  
  70. /*
  71. * :::::::::::: Initialer Eintrag :::::::::::::::::::::
  72. */
  73.  
  74. // Ersten Eintrag in die DB schreiben
  75. writeIntoDatabase("Max Mustermann");
  76.  
  77.  
  78. /*
  79. * :::::::::::: Daten nach Buttonklick einfüllen :::::::::::::::::::::
  80. */
  81.  
  82.  
  83. function writeIntoDatabase(str:String):void {
  84.  
  85.     // create the SQL statement
  86.     var insertStatement:SQLStatement = new SQLStatement();
  87.     insertStatement.sqlConnection = conn;
  88.  
  89.     // define the SQL text
  90.     var insertSql:String =
  91.         "INSERT INTO personen (vorname) " +
  92.         "VALUES ('" + str + "')";
  93.     insertStatement.text = insertSql;
  94.  
  95.  
  96.     // event listener
  97.     insertStatement.addEventListener(SQLEvent.RESULT, insertResult);
  98.     insertStatement.addEventListener(SQLErrorEvent.ERROR, insertError);
  99.  
  100.     // statement ausführen
  101.     insertStatement.execute();
  102. }
  103.    
  104. function insertResult(event:SQLEvent):void {
  105.     trace("INSERT statement succeeded");
  106.     myTextArea.text = "Eintrag erfolgreich hinzugefügt.";
  107. }
  108.  
  109. function insertError(event:SQLErrorEvent):void
  110. {
  111.     myTextArea.text = "Fehler: " + event.error.message;
  112.     myTextArea.text += "\nDetails: " + event.error.details;
  113. }
  114.  
  115.  
  116. mySubmitButton.addEventListener(MouseEvent.CLICK, mySubmitButton_CLICK);
  117.  
  118. function mySubmitButton_CLICK(e:MouseEvent):void {
  119.         writeIntoDatabase(myTextInput.text);
  120. }
  121.  
  122.  
  123. /* ::::::::::::::: Werte auslesen :::::::::::
  124. *
  125. */
  126.  
  127. myReadButton.addEventListener(MouseEvent.CLICK, myReadButton_CLICK);
  128.  
  129.  
  130. var selectStmt:SQLStatement
  131.  
  132. function myReadButton_CLICK(e:MouseEvent):void {
  133.    
  134.     // neues select statement
  135.     selectStmt = new SQLStatement();
  136.  
  137.     // dem statement die verbindung zuweisen
  138.     selectStmt.sqlConnection = conn;
  139.  
  140.     // statement festlegen
  141.     selectStmt.text = "SELECT vorname FROM personen";
  142.  
  143.     // event listeners
  144.     selectStmt.addEventListener(SQLEvent.RESULT, resultHandler);
  145.     selectStmt.addEventListener(SQLErrorEvent.ERROR, errorHandler);
  146.  
  147.     // statement ausführen
  148.     selectStmt.execute();
  149.  
  150. }
  151.  
  152.  
  153.  
  154.  
  155. function resultHandler(event:SQLEvent):void {
  156.    
  157.     // ergebnis ablegen
  158.     var result:SQLResult = selectStmt.getResult();
  159.    
  160.     // anzahl der einträge
  161.     var numResults:int = result.data.length;
  162.    
  163.     // Textfeld leeren
  164.     myTextArea.text = "";
  165.    
  166.     // schleife
  167.     for (var i:int = 0; i ) {
  168.        
  169.         var n:Object = result.data[i];
  170.         myTextArea.text += n.vorname + "\n";
  171.  
  172.     }
  173. }

Link: Working with local SQL databases
Quelldatei (.fla)