Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Scrivere e leggere dal database

Inserire e leggere dati da un database SQLite
Inserire e leggere dati da un database SQLite
Link copiato negli appunti

Scrivere dati in un database

Come detto chi ha già dimestichezza con i database non avrà particolari problemi poiché con AIR e SQLite è possibile sfruttare i comandi più comuni della sintassi SQL; il comando per scrivere dei dati è INSERT.

Possiamo sfruttare ancora una volta gli eventi per sapere quando una query viene portata a termine, nel nostro caso ad esempio dobbiamo inserire i dati solo una volta che la tabella è stata creata: modifichiamo allora in questo modo la funzione 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
  // Associo la fine della query alla funzione inseriscidati
  esegui_query.addEventListener(SQLEvent.RESULT,inseriscidati)
  // Eseguo la query
  esegui_query.execute()
}

In questo modo quando la tabella sarà stata creata verrà eseguita la funzione inseriscidati, il cui codice è:

public function inseriscidati(evt:Event):void{
  var query_ins:String = "INSERT INTO prova VALUES (1,'Davide','Beltrame')"
  var esegui_query_ins:SQLStatement = new SQLStatement()
  esegui_query_ins.sqlConnection = connessione
  esegui_query_ins.text = query_ins
  esegui_query_ins.execute()
}

Possiamo facilmente notare come il procedimento sia pressoché identico a quello per la creazione della tabella, con la sola differenza che in questo caso usiamo una query con il comando INSERT per popolare proprio la tabella prova.

Leggere dal database

Analogamente a quanto visto finora possiamo facilmente intuire che il codice per la lettura di un database varierà solamente per quanto concerne la query, dove utilizzeremo il comando SELECT. Avremo quindi una funzione di questo tipo:

public function leggidati(evt:Event):void{
  var query_let:String = "SELECT * FROM prova "
  esegui_query_let = new SQLStatement()
  esegui_query_let.sqlConnection = connessione
  esegui_query_let.text = query_let
  esegui_query_let.addEventListener(SQLEvent.RESULT,mostradati)
  esegui_query_let.execute()
}

Vediamo come sia stato impostato l'evento SQLEvent.RESULT associato alla funzione mostradati: questa funzione ci permetterà di mostrare visivamente i dati all'utente. Una comodità veramente notevole consiste nei dati ottenuti dal database che vengono ricavati in maniera da poterli usare direttamente all'interno del componente DataGrid, senza che sia necessario del codice aggiuntivo per posizionare i dati; la nostra funzione sarà infatti così:

public function mostradati(evt:Event):void{
  dati_estratti = esegui_query_let.getResult()
  if(dati_estratti != null){
    var dati_tabella:Array = dati_estratti.data
    dati.dataProvider = dati_tabella
  }
}

Molto semplicemente, nella prima riga ricaviamo un oggetto SQLResult (dati_estratti) dall'oggetto SQLStatement esegui_query_let usandone il metodo getResult(), dopo di che se il valore è diverso da null ricaviamo i dati della query e associamo l'array dati_tabella al componente DataGrid con id dati. Il valore di dati_estratti sarà uguale a null solo se i risultati trovati saranno 0.

Il componente DataGrid avrà il seguente codice:

<mx:DataGrid x="20" y="89" id="dati">
  <mx:columns>
    <mx:DataGridColumn headerText="Id" dataField="ID"/>
    <mx:DataGridColumn headerText="Nome" dataField="NOME"/>
    <mx:DataGridColumn headerText="Cognome" dataField="COGNOME"/>
  </mx:columns>
</mx:DataGrid>

Notiamo in particolare l'id del DataGrid e l'attributo dataField delle colonne, che ci permette di associare come fonte di dati il campo del database.

NOTA: questo valore è case-sensitive, per cui assicuriamoci di usare lo stesso nome dei campi del database, nel nostro caso sono in maiuscolo perché nella query di creazione tabella li avevamo inseriti in maiuscolo.

Testando l'applicazione otterremo un risultato di questo genere:

Figura 1. Dati di un database mostrati nel DataGrid
Screenshot del programma in esecuzione

Anche Flash CS3 permette di associare direttamente i risultati ottenuti ad un componente DataGrid. Come sempre il codice subirà alcune variazioni, ad esempio il codice per connettersi al database, leggerlo e mostrare i dati nel componente sarà di questo tipo:

import flash.data.SQLResult;
import flash.filesystem.File;
import flash.data.SQLStatement;
import flash.data.SQLConnection;
import flash.events.SQLEvent;
import flash.data.SQLResult;
import fl.data.DataProvider;
var esegui_query_let:SQLStatement;
var dati_estratti:SQLResult;
var connessione:SQLConnection;
var file:File;
file = new File(File.documentsDirectory.nativePath + "/DatbaseProva.db");
connessione = new SQLConnection();
connessione.addEventListener(SQLEvent.OPEN,leggidati);
connessione.open(file);
function leggidati(evt:Event):void {
  var query_let:String = "SELECT * FROM prova ";
  esegui_query_let = new SQLStatement();
  esegui_query_let.sqlConnection = connessione;
  esegui_query_let.text = query_let;
  esegui_query_let.addEventListener(SQLEvent.RESULT,mostradati);
  esegui_query_let.execute();
}
function mostradati(evt:Event):void {
  dati_estratti = esegui_query_let.getResult();
  if (dati_estratti != null) {
    var dati_tabella:DataProvider = new DataProvider(dati_estratti.data);
    dg.dataProvider = dati_tabella;
  }
}

AIR permette anche di comunicare con altri database, come appunto MySQL, ma in questo caso sarebbe necessario le proprie classi. A tal proposito potrebbe essere utile ad esempio il progetto asSQL, un progetto che ha proprio lo scopo di connettere AIR e MySQL tramite Actionscript.

Ti consigliamo anche