AIR - Spara data från appen (SQLLite) PDF Skriv ut Skicka sidan
Skrivet av Danel Kirch   
2011-03-06 00:00
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());}

Bedöm artikeln:
( 1 Bedömning )
Skapad 2011-03-06 00:00 av Danel Kirch

Visad 354 gånger än så länge.

Senaste artiklarna av Danel Kirch


Medlemmar


Members Online: 0

Senaste registrerade

LisaRaichand : 22 april 2012 19:55pilu : 31 januari 2012 09:58Gostship99 : 07 januari 2012 19:37Director : 18 november 2011 05:44Dahlback : 17 november 2011 16:28mikwonwheels : 14 november 2011 13:20Kviddis : 04 oktober 2011 19:53buddha1966 : 25 september 2011 14:22idesign : 20 september 2011 08:45TxT : 05 september 2011 11:07ApelG : 05 september 2011 11:04
Partners
Adobe user group
fdt5-logo
TechSmith
Lynda user group
Apress user group
O´reilly user group
Peachpit user group
Friends Of Ed
Manning user group


Senaste blogginläggen

Av: Danel
-20.02.2012
Av: Patric Jonsson
-27.01.2012
Av: Patric Jonsson
- 3.01.2012
Av: Patric Jonsson
-29.11.2011
Av: Danel
-26.11.2011
Av: Patric Jonsson
-14.11.2011
Av: Patric Jonsson
- 8.11.2011
Av: Danel
- 7.11.2011
Av: Patric Jonsson
-27.09.2011

Senaste kommentarer

Senaste trådarna

Av Hallon
- 08/05/2012
Av goldensebbe
- 06/04/2012
Av Hallon
- 29/03/2012
Av buddha1966
- 06/03/2012
Av buddha1966
- 29/02/2012
Av Wide Circle
- 20/02/2012
Av zocstyle
- 15/02/2012
Av ufoalf30
- 05/01/2012
Av peterdavidsson
- 08/12/2011
Av JohnPaulie
- 03/12/2011
Av coffaldo
- 17/11/2011
Av buddha1966
- 05/11/2011
Av buddha1966
- 03/11/2011

Blogkalender

  • 2012 (3)
  • 2011 (37)
  • 2010 (85)
  • 2009 (18)
  • Vem är online

    Vi har 10 besökare online
    RocketTheme Joomla Templates