Quando i dati da salvare sono tanti, e diversi tra loro, non basta più affidarsi a dei file di testo ma è consigliabile utilizzare un database.
AIR integra al suo interno tutto il necessario per utilizzare SQLite, un motore di database basato su file. SQLite supporta praticamente tutti i comandi comuni della sintassi SQL per cui anche chi ha utilizzato in passato MySQL non avrà grossi problemi a sfruttare SQLite, con il vantaggio che quest'ultimo non richiederà un web-server o altri programmi per essere eseguito insieme all'applicazione.
Per creare e gestire un database SQLite può essere utile affidarsi a software come SQLite Administrator così da poter impostare facilmente i database e le tabelle su cui andrà poi a lavorare l'applicazione AIR. È anche possibile creare il database direttamente da AIR.
Abbiamo detto che SQLite si basa su file, per cui possiamo intuire come per creare un database (ma anche per scriverlo e leggerlo) andremo a fare riferimento ad un file e di conseguenza utilizzeremo la classe flash.filesystem.File
; per quanto riguarda invece le classi specifice per il database abbiamo principalmente tre classi:
- SQLConnection: per creare la connessione al database;
- SQLResult: per ricavare i dati recuperati dal database;
- SQLStatement: per eseguire delle query sul database aperto.
Proprio SQLConnection
e SQLStatement
si possono utilizzare per creare un nuovo database ed inserirvi delle tabelle. Iniziamo con la creazione del file che darà da database; l'operazione è molto semplice, prendiamo ad esempio il seguente codice:
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
creationComplete="inizia()">
<mx:Script>
<![CDATA[
import flash.filesystem.File;
import flash.data.SQLConnection;
private var file:File
private var connessione:SQLConnection
private function inizia():void{
// Imposto il percorso per il database
file = new File("c:/AIR/DatabaseProva.db")
// Creo la connessione
connessione = new SQLConnection()
// Mi connetto al file
connessione.open(file)
}
]]>
</mx:Script>
</mx:WindowedApplication>
Se il database esiste viene avviata la connessione mentre se non esiste il file viene prima creato. In entrambi i casi dopo l'operazione avremo una connessione aperta verso il database e potremo operare al suo interno.
Grazie agli eventi siamo in grado di sapere con certezza quando la connessione è aperta e attiva e quindi avere la certezza di poter avviare le query; AIR permette di creare tabelle utilizzando la classica sintassi SQL, quindi con il comando CREATE TABLE. Ecco un esempio:
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
creationComplete="inizia()">
<mx:Script>
<![CDATA[
import flash.filesystem.File;
import flash.data.SQLStatement;
import flash.data.SQLConnection;
import flash.events.SQLEvent;private var file:File
private var connessione:SQLConnection
private function inizia():void{
file = new File("C:/AIR/DatbaseProva.db")
connessione = new SQLConnection()
connessione.open(file)
// Quando la connessione viene aperta chiamo la funzione creatabelle
connessione.addEventListener(SQLEvent.OPEN,creatabelle)
}
public function creatabelle(evt:Event):void{
// Imposto la query da eseguire
var query:String = "CREATE TABLE prova (ID INTEGER PRIMARY KEY, NOME TEXT, COGNOME TEXT)"
// Creo l'oggetto SQLStatement da usare per eseguirla
var esegui_query:SQLStatement = new SQLStatement()
// Imposto la destinazione della query sul database a cui "connessione" è connessa
esegui_query.sqlConnection = connessione
// Inserisco la query memorizzata nell'oggetto SQLStatement
esegui_query.text = query
// Eseguo la query
esegui_query.execute()
}
]]>
</mx:Script>
</mx:WindowedApplication>
Notiamo in particolare l'utilizzo della classe SQLEvent per poter rilevare l'apertura della connessione e della classe SQLStatement per memorizzare la query ed eseguirla, dopo aver impostato come target per questa azione connessione, ovvero l'oggetto SQLConnection associato al database che abbiamo creato.
Una volta che il database è stato creato e le tabelle sono state inserite, sarà possibile inserire dei dati all'interno del database.
Anche in questo caso possiamo utilizzare le costanti per i percorsi dei file, ad esempio per creare il database nella directory dei documenti potremmo usare il codice;:
file = new File(File.documentsDirectory.nativePath + "/DatabaseProva.db")