Appcelerator Titanium: sviluppare app per Android e iPhone – Terza Parte

In questa terza parte del nostro studio del framework Titanium vedremo come interagire con il database SQLite integrato in esso.

Troviamo tutto l’elenco delle API fornite all’indirizzo:

http://assets.appcelerator.com.s3.amazonaws.com/docs/API_DatabaseClass.pdf

Prima di vedere le API, sintetizziamo in una tabella i differenti tipi di storage offerti e il livello di persistenza fornito:

Tipo di Storage Utilizzato Persistenza Fornita
Variabili Nella singola esecuzione dell’applicazione
Proprietà degli oggetti Nella singola esecuzione dell’applicazione
Titanium.App.Properties In tutte le sessioni dell’applicazione
Database In tutte le sessioni dell’applicazione
Filesystem Persistenza sul device fisico

Per poter creare un database o aprirne uno precedentemente definito, si utilizza sempre il metodo open:

var db = Titanium.Database.open('test');

in alternativa è possibile installare un database prepopolato (sempre in un formato accessibile dall’SQLite) utilizzando il metodo install ed inserendolo nella cartella Resources:

var db= Titanium.Database.install('../testDB.db', 'test');

nell’esempio viene indicato come primo parametro il path del file e nel secondo il nome del db.

In entrambi i casi nella variabile db ritroveremo una istanza della classe Titanium.Database.DB sulla quale possiamo invocare il metodo execute; tale metodo riceve come parametro uno statement SQL.

Ad esempio possiamo creare una tabella nel database appena definito:

db.execute('CREATE TABLE IF NOT EXISTS TABLE TEST (ID INTEGER, NAME TEXT)');

Inseriamo dei record all’interno della tabella creata:

db.execute('INSERT INTO DATABASETEST (ID, NAME ) VALUES(?,?)',1,'Name 1');
db.execute('INSERT INTO DATABASETEST (ID, NAME ) VALUES(?,?)',2,'Name 2');
db.execute('INSERT INTO DATABASETEST (ID, NAME ) VALUES(?,?)',3,'Name 3');

L’oggetto db ha inoltre due attributi molto utili:

  • lastInsertRowId: ci consente di ottenere l’id dell’ultimo record inserito con una insert into;
  • rowsAffected: ritorna il numero di record che sono stati modificati nell’ultima query, utile nelle operazioni di update.

Il metodo execute ritornerà un oggetto del tipo Titanium.Database.ResultSet, tale oggetto ci permette di iterarne i valori estraendo così i dati dalla query effettuata.

Ad esempio effettuiamo una query di select:

var rows = db.execute('SELECT * FROM DATABASETEST');
 
ed iteriamo sui valori ritornati:
 
while (rows.isValidRow()) {
 
Titanium.API.info('ID: ' + rows.field(0) + ' NAME: ' + rows.fieldByName('name') + ' COLUMN NAME ' + rows.fieldName(0));
 
rows.next();

}

Il metodo isValidRow ritorna true se la riga è valida mentre il metodo next itera sulla prossima riga e ritorna false se non ci sono più righe.

Gli altri due metodi field(Integer index) e fieldByName(String name) ritornano entrambi il valore del campo, uno passandogli l’indice l’altro il nome del campo. fieldName(Integer index) ritorna il nome del campo passandogli l’indice. Vi è inoltre un altro metodo, fieldCount, che ritorna il numero di colonne del record.

Completate le operazioni sul db possiamo chiudere il ResultSet e  la connessione col database per poter rilasciare le risorse impegnate con :

rows.close();
db.close();
1 Stella2 Stelle3 Stelle4 Stelle5 Stelle (Nessun voto ancora)
Loading...
You can leave a response, or trackback from your own site.

Leave a Reply

*