Come creare e gestire un database su android

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.

android

Vediamo come primo strumento come creare e gestire un database SQLite.

Potremo usare questa classe nella nostra activity.

[java]

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

}

}

}

[/java]

Creato il database vediamo come implementarlo all’interno di un’activity richiamando gli elementi del db e mostrandoli in una ListView:

[java]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();

}

}

[/java]

Vediamo ora i due file xml correlati, molto semplici:
prima il main

[xml]<?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>

[/xml]

Poi abbiamo il layout di ogni singolo elemento della lista:

[xml]<?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>

[/xml]

Fonte: anddev.it

Approfondimenti...

Google acquisisce Motorola
 Google ha annunciato l’acquisizione del gruppo Motorola Mobility per la modica cifra di 12,5 miliardi di dollari. In questo modo Google, ha fatto...

Una decisione difficile: il database!
 Michael Stonebraker, noto guru della ricerca sui sistemi di database relazionali, in un articolo apparso su GigaOM che ragiona sul come le start up ripongano...

Nuovi smartphone nokia – windows mobile in arrivo
 Sembra siano in arrivo sul mercato i nuovi e ipertecnologici smartphone con sistema operativo Windows Mobile Phone 7 prodotti da Nokia. I modelli dovrebbero...

Confronto tra i migliori smartphone 2011: HTC vs iPhone vs Motorola vs Samsung vs BlackBerry
 In questo articolo proseguiamo col confronto tra i migliori smartphone 2011 iniziato in una serie di post precedenti. In questo confronto sono stati presi in...

Viber da oggi anche su Android
 Viber, è una famosissima applicazione che dopo essere nata per iPhone ha riscosso un successo inimmaginabile in quanto permette in modo assolutamente gratuito...

Commenti...


Traffyk

# 03/6/2011 14:39

Questa guida deriva da http://www.anddev.it/index.php?topic=856.0 che ci ha richiesto espressamente di citare la fonte dopo aver trovato questo post.

Andrea la prox volta un linkino in più nell’apposita sezione è sempre ben visto ok? :) Grasssiee!



Vorresti inserire un commento?

Registrati per un account gratuito oppure entra (se sei già utente).





Mandaci un Trackback a questo URL se vuoi:
http://www.italianbloggers.it/45439/come-creare-e-gestire-un-database-su-android/trackback/