[DEV] Creare un database su Android con sqlite
Affrontando lo sviluppo delle vostre prime applicazioni vi accorgerete sicuramente che uno dei concetti fondamentali che bisogna possedere è il come e dove salvare i dati utili alla nostra applicazione. L’sdk di Android ci fornisce diversi strumenti come le shared preferences, i content values o il database classico.
Vediamo come primo strumento come creare e gestire un database SQLite.
Potremo usare questa classe nella nostra activity.
public class MyDatabase {
SQLiteDatabase mDb;
DbHelper mDbHelper;
Context mContext;
private static final String DB_NAME="exampleDb";//nome del database<!--more-->
private static final int DB_VERSION=1; //numero di versione del nostro database
public MyDatabase(Context ctx){
mContext=ctx;
mDbHelper=new DbHelper(ctx, DB_NAME, null, DB_VERSION);
}
public void open(){ //apriamo il database, rendendolo scrivibile e leggibile
mDb=mDbHelper.getWritableDatabase();
}
public void close(){ //chiudiamo il database
mDb.close();
}
// Vediamo ora come aggiungere tabelle e campi alle tabelle del db
public void insertPerson(String name,int eta){ //metodo per inserire i dati
ContentValues cv=new ContentValues();
cv.put(PersonMetaData.PERSON_NAME_KEY, name);
cv.put(PersonMetaData.PERSON_AGE_KEY, eta);
mDb.insert(PersonMetaData.PERSON_TABLE, null, cv);
}
public Cursor fetchProducts(){ //metodo per fare la query di tutti i dati
return mDb.query(PersonMetaData.PERSON_TABLE, null,null,null,null,null,null);
}
static class PersonMetaData { // i metadati della tabella, accessibili ovunque
static final String PERSON_TABLE = "person";
static final String ID = "_id";
static final String PERSON_NAME_KEY = "name";
static final String PERSON_AGE_KEY = "eta";
}
private static final String PERSON_TABLE_CREATE = "CREATE TABLE IF NOT EXISTS " //codice sql di creazione della tabella
+ PersonMetaData.PERSON_TABLE + " ("
+ PersonMetaData.ID+ " integer primary key autoincrement, "
+ PersonMetaData.PERSON_NAME_KEY + " text not null, "
+ PersonMetaData.PERSON_AGE_KEY + " integer not null);";
private class DbHelper extends SQLiteOpenHelper { //classe che ci aiuta nella creazione del db
public DbHelper(Context context, String name, CursorFactory factory,int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase _db) { //solo quando il db viene creato, creiamo la tabella
_db.execSQL(PERSON_TABLE_CREATE);
}
@Override
public void onUpgrade(SQLiteDatabase _db, int oldVersion, int newVersion) {
//qui mettiamo eventuali modifiche al db, se nella nostra nuova versione della app, il db cambia numero di versione
}
}
}
Creato il database vediamo come implementarlo all’interno di un’activity richiamando gli elementi del db e mostrandoli in una ListView:
public class Example extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TextView personTv=(TextView)findViewById(R.id.personTv);
ListView peopleLv=(ListView)findViewById(R.id.peopleLv);
MyDatabase db=new MyDatabase(getApplicationContext());
db.open(); //apriamo il db
if(db.fetchProducts().getCount()==0){//query di tutti i dati e inserimento dati, solo se il db è vuoto
db.insertProduct("Fabrizio", 23);
db.insertProduct("Giorgio", 61);
db.insertProduct("Rino", 87);
}
Cursor c=db.fetchProducts(); // Creiamo un cursore con tutti i dati del db
startManagingCursor(c);
SimpleCursorAdapter adapter=new SimpleCursorAdapter( //semplice adapter per i cursor
this,
R.layout.person, //il layout di ogni riga/prodotto
c,
new String[]{MyDatabase.PersonMetaData.PERSON_NAME_KEY,MyDatabase.PersonMetaData.PERSON_AGE_KEY},//queste colonne
new int[]{R.id.nameTv,R.id.ageTv});//in queste textView
peopleLv.setAdapter(adapter); //L'adapter per la lista
//qui vediamo invece come prendere i dati dal db e visualizzarli nelle textview
int nameCol=c.getColumnIndex(MyDatabase.PersonMetaData.PERSON_NAME_KEY); //indici delle colonne
int ageCol=c.getColumnIndex(MyDatabase.PersonMetaData.PERSON_AGE_KEY);
if(c.moveToFirst()){ //se va alla prima entry, il cursore non è vuoto
do {
personTv.append("Person Name:"+c.getString(nameCol)+", Età:"+c.getInt(ageCol)+"\n"); //estrazione dei dati dalla entry del cursor
} while (c.moveToNext());//iteriamo al prossimo elemento
}
db.close();
}
}
Vediamo ora i due file xml correlati, molto semplici:
prima il main
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/personTv" android:textColor="#000000" android:textSize="20dp" /> <ListView android:id="@+id/peopleLv" android:layout_width="fill_parent" android:layout_height="fill_parent" android:cacheColorHint="#00000000" android:dividerHeight="2dp" ></ListView> </LinearLayout>
Poi abbiamo il layout di ogni singolo elemento della lista:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal" android:weightSum="10" > <TextView android:id="@+id/nameTv" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="8" android:textSize="15dp" android:textStyle="bold" android:textColor="#000000"> </TextView> <TextView android:id="@+id/ageTv" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="2" android:textSize="15dp" android:textStyle="bold" android:textColor="#000000"> </TextView> </LinearLayout>
[Via]
6 Commenti
Trackbacks/Pingbacks
- Tweets that mention [DEV] Creare un database su Android con sqlite | Nexus Lab - Sperimentazioni androidi - News, prove, tutorial e programmazione su android -- Topsy.com - [...] This post was mentioned on Twitter by Appunti Sul Web, Nexus-Lab. Nexus-Lab said: : [DEV] Creare un database su ...
- Post sul blog e citazione delle fonti - [...] sul blog e citazione delle fonti Buongiorno, vorrei ...




ma un profano che vuole capire cio che avete scritto come deve fare? Esiste 1 giuda?
puoi comprarti una guida utilissima:
Android. Guida per lo sviluppatore di Massimo Carli…..
pero’ devi masticare… un po di java e informatica…
Non e’ semplice!
Io ho tutti e 2 i libri di massimo ……..NON COMPRATELI CERCATEVI TUTTO SUL WEB! SONO UNA PORCHERIA!
sulla riga
mDbHelper=new DbHelper(ctx, DB_NAME, null, DB_VERSION);
il valore null va in errore.. con che cosa la devo sostituire?
Ciao! Ottima guida. Se non sbaglio però c’è qualcosa che non torna.
Dentro l’activity le righe del tipo:
db.insertProduct(“Fabrizio”, 23);
credo vadano sostituite con righe del tipo
db.insertPerson(“Fabrizio”, 23);
dove insertPerson è il metodo definito nella classe MyDatabase per inserire dati nella tabella denominata person (product non esiste.. sarà un refuso).
Bravo, essenziale ed esaustivo: parla il codice. Così deve essere un esempio!