Uso di database con Android

In questo articolo mostrerò brevemente come utilizzare un database relazionale con Android. E' molto semplice: Android nasce con database SQLite embed ed una serie di classi per sfruttarne le potenzialità: in particolare le classe SQLiteOpenHelper e SQLiteDatabase. Si noti inoltre che l'uso di un database privato all'interno di una classe e la realizzazione di un Content Provider sono due cose separate. Un Content Provider è necessario solo quando si vuole rendere il database accressibile anche ad altre applicazioni. Altrimenti è sufficiente la soluzione qui esposta.

Per usare un database si provveda quindi ad estendere una propria versione della classe SQLiteOpenHelper e si dia corpo ai suoi metodi astratti:

package it.pacchetto.mio
...
public class MioDatabase extends SQLiteOpenHelper {
 
private static final String LOG_TAG = ... ;
private static final String DATABASE_FILENAME = ... ;
private static int DATABASE_VERSION = 1;
Context context = null;
 
MioDatabase(Context context) {
  super(context, DATABASE_FILENAME, null, DATABASE_VERSION);
  this.context = context;
}
 
public void onCreate(SQLiteDatabase db) {
  // creazione delle tabelle. Questo metodo viene eseguito solo se
  // non è presente alcun file .db all'interno delle cartelle dell'app
  db.execSQL( ... );
}
 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
  // cancellazione delle vecchie tabelle e nuova creazione
  // questo metodo viene eseguito solo in caso di aggiornamento della versione di database
  db.execSQL( ... );
}

Una volta creata un'istanza della classe MioDatabase all'interno dell'Activity nella quale vogliamo farne uso (si abbia l'accortezza di instanziarla nel metodo onCreate) possiamo, all'interno del nostro codice, manipolare facilmente il database, attraverso un'istanza della classe SQLiteDatabase. Si veda qualche esempio:

Query:

SQLiteDatabase db = openHelper.getReadableDatabase();
Cursor cursor = db.query ( .... );
Insert:

SQLiteDatabase db = openHelper.getWriteableDatabase();
Cursor cursor = db.insert ( .... );