Den här tutorialn är mer som en code-snippet än en riktig tutorial. Anledningen till det är att det mer text än skärmbilder.
Ett sätt att spara data i din AIR-app är att du använder dig av filskivningar och läsningar och mer specifikt menat XML. Men det är inte alltid det är som enklast eller optimalt att göra på det sättet.
Där kommer SQLLite in i bilden. Det är precis som mySQL fast ingen server utan en liten fil som sparas på enheten eller datorn. SQLLite har fördelen i AIR att du slipper läsa in all data som med XML. Du läser bara in den raden i den kolumnen som du vet datan finns i.
Så, innan jag postar kompletta koden här så vill jag även rekommendera en annan AIR app som är specifikt skapad för SQLLite. Det är en app som läser SQLLite filer och låter dig manipulera dess data. Mer om Lita hittar du
här »
Jag har skrivit en färdig app som hanterar inläsning- sparning- och radering av data. I den appen använder jag några komponenter som kanske inte syns rakt av och dessa är:
- 3 knappar - 1) öppna databasen 2) radera data i databasen 3) lägg till data i databasen
- en datagrid som listar all data som lästes in från databasen
- 2 input-texfält som används för att lägga till ny data i databasen
Jag har även kommenterat koden för att förklara vad som sker och händer. Du kan också ladda ner FLA filen
här »// Importera klasser
import flash.data.SQLStatement;
import flash.errors.SQLError;
import flash.events.Event;
import flash.events.SQLErrorEvent;
import flash.events.SQLEvent;
import flash.events.TimerEvent;
import flash.filesystem.File;
import flash.events.MouseEvent;
import fl.data.DataProvider;
// Skapa en sql anslutning
var anslutning:SQLConnection = new SQLConnection();
// query - strängar som ska köras mot databasen, ex SELECT, UPDATE, DELETE
var query:SQLStatement = new SQLStatement();
// Tre knappar att leka med :)
createBtn.addEventListener(MouseEvent.MOUSE_UP,btnHandler);
deleteBtn.addEventListener(MouseEvent.MOUSE_UP, btnHandler);
updateBtn.addEventListener(MouseEvent.MOUSE_UP, btnHandler);
// Och deras hanterare
function btnHandler(m:MouseEvent):void{
var tar = m.currentTarget;
switch (tar) {
case createBtn :
// Öppna databasen
oppnaDB();
break;
case deleteBtn :
// Raderar datagrids valda objektet i databasen. Den hämtar ut ID för den datan från datagriden och
// anropar funktion som hanterar raderingen
raderaObjekt(DataGrid(dataLista).selectedItem.id);
break;
case updateBtn :
// Lägger till data från 2 textfält
adderaData();
break; }
}
function oppnaDB():void{
// Hänvisa till databas filen, om den inte skulle finnas, då skapas den automatiskt
var db:File = File.applicationStorageDirectory.resolvePath("sampleDB.db");
// Öppna filen så att vi kan hantera datan, dvs. spara, uppdatera och radera
anslutning.openAsync(db);
// Några händelselyssnare så vi vet vad som pågår;
anslutning.addEventListener(SQLEvent.OPEN, dbOppen);
anslutning.addEventListener(SQLErrorEvent.ERROR, error);
query.addEventListener(SQLErrorEvent.ERROR, error);
query.addEventListener(SQLEvent.RESULT, resultatDB);
}
function dbOppen(e:SQLEvent):void{
// visa till queryn vilken anslutning som ska användas. Du kan ha flera anslutningar mot olika DB filer eller servrar
// så du måste sätta rätt anslutning
query.sqlConnection = anslutning;
// Sträng som ska köras mot databasen
// Om appen körs för första gången så skapas även filen (om den inte finns) därefter måste vi
// se till att databsen innhåller rätt tabell struktur, vilket skapas här om den skulle saknas
query.text = "CREATE TABLE IF NOT EXISTS user ( id INTEGER PRIMARY KEY AUTOINCREMENT, first_name TEXT, last_name TEXT);";
// eksekvera query strängen
query.execute();
// och uppdatera appen.;
// Den hämtar bara data från databasen så att datagriden fylls med det som redan finns i databasen
uppdateraDB();
}
function adderaData():void{
// När data ska läggas till så tar vi texten från textfälten och lagrar dessa i databasen
query.text = "INSERT INTO user (first_name, last_name) VALUES('" + fnamn.text + "','" + enamn.text + "');";
// Hänvisa anslutning till rätt query
query.sqlConnection = anslutning;
// Eksekvera query.execute();
// Uppdatera uppdateraDB();
}
function uppdateraDB():void{
// Om eksekveringen är klar, då kan vi lägga till data i DB filen, annars genererar den en error
// och talar om att appen fortfarande håller på eksekverar den föregående queryn.
if (! query.executing) {
// Om ingen eksekvering pågår, skapar vi en ny query sträng och eksekverar den
query.text = "SELECT * FROM user";
query.execute();
} else {
// Annars om eksekvering pågår så kör vi denna funktion igen, för att se om denna gång eksekveringen är klar
// Det är som en loop-funktion
uppdateraDB();
}
}
function raderaObjekt(_id:uint):void{
// Ta emot vilken ID ska raderas i DB och skapa rätt query och eksekvera
// därefter uppdaterar vi datagriden med den nya datan som finns i DB
query.text = "DELETE FROM user WHERE id=" + _id;
query.execute();
uppdateraDB();
}
function resultatDB(e:SQLEvent):void{
// När eksekveringen är klar och vår SQLEvent.RESULT dispatchas (med andra ord 'kallas') så tar vi emot datan
// och lägger den i DataGriden
var data:Array = query.getResult().data;
var dp:DataProvider = new DataProvider(data);
dataLista.dataProvider = dp; dataLista.invalidate();
}
function error(e:SQLErrorEvent):void{ trace(e.toString());}