back to top

Gestire i database su Android con SQLite Database Browser – Guida Sviluppo App Android

Quello che abbiamo visto è utile a livello didattico, tuttavia spesso nelle applicazioni reali risulta più efficiente creare il database in fase di progettazione piuttosto che in fase di esecuzione. Per creare un database SQLite in fase di progettazione è possibile utilizzare diversi tool gratuiti reperibili in rete. Nella presente guida utilizzeremo il tool SQLite Database Browser, disponibile per diverse piattaforme all’indirizzo:

http://sourceforge.net/projects/sqlitebrowser/

Dopo aver scaricato il file di installazione avviamolo in modalità amministratore e clicchiamo su Avanti

Dopo aver accettato la licenza d’uso completiamo l’installazione e avviamo l’applicazione, la cui interfaccia è la seguente

Creazione di un database con SQLite Database Browser

Per creare un nuovo database clicchiamo in alto a sinistra sul pulsante New Database e nella successiva finestra di dialogo diamo un nome allo stesso (io l’ho denominato "TestDB"). Cliccando su OK viene automaticamente aperta la finestra per la creazione di una nuova tabella

Possiamo crearla subito o successivamente. Optiamo per la seconda soluzione, quindi chiudiamo questa finestra e visualizziamo l’interfaccia dell’applicazione

Come possiamo vedere sono presenti quattro tab:

  • Database Structure
  • Browse Data
  • Edit Pragmas
  • Execute SQL

La prima tab (Database Structure) ci mostra la struttura del database appena creato, che ovviamente al momento non contiene nulla.

Quindi clicchiamo sul pulsante Create Table e creiamo la nostra tabella "clienti", la quale avrà sempre gli stessi campi:

  • id
  • nome
  • indirizzo

Dopo aver cliccato su OK la struttura del nostro database sarà la seguente

Per consolidare la nostra nuova tabella (e in generale qualsiasi altra modifica sul database) clicchiamo in alto sul pulsante Write Changes. Se invece cliccassimo su Revert Changes verrebbero cancellate tutte le modifiche fatte al database prima dell’ultimo salvataggio (e quindi anche la nostra tabella).

Per popolare la tabella appena creata clicchiamo sulla seconda tab (Browse Data) ed inseriamo alcuni valori, cliccando prima sul pulsante New Record

Se sul nostro database fossero presenti più tabelle potremmo selezionare la tabella sulla quale lavorare tramite il menù a tendina Table.

La terza tab (Edit Pragmas) serve ad impostare alcune opzioni sulle quali soffermarsi non rientra nello scopo della presente guida, mentre l’ultima tab (Execute SQL) consente di effettuare query sul nostro database.

SQLite, come sappiamo, supporta la sintassi del linguaggio SQL quindi possiamo impostare query di vario tipo per effettuare selezioni, cancellazioni, inserimenti, aggiornamenti di dati, ecc.

Utilizzo del database all’interno di un’applicazione Android

Vediamo adesso come utilizzare questo nostro database (creato SQLite Database Browser) all’interno di un’applicazione Android. Per fare ciò apriamo il progetto "TestDatabase" (che abbiamo creato poche lezioni fa) e trasciniamo il file di database appena creato nella cartella assets:

Adesso modifichiamo il file MainActivity.java nel modo seguente

package com.example.testdatabase;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import android.os.Bundle;
import android.app.Activity;
import android.database.Cursor;
import android.widget.Toast;

public class MainActivity extends Activity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    
    GestioneDB db = new GestioneDB(this);
  
    try {       
      String destPath = "/data/data/" + getPackageName() + "/databases";
      File f = new File(destPath);
      if (!f.exists()) {
        f.mkdirs();
        f.createNewFile();
        CopyDB(getBaseContext().getAssets().open("TestDB"), new FileOutputStream(destPath + "/TestDB"));
      }
    } catch (FileNotFoundException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }
    
    db.open();  
    Cursor c = db.ottieniTuttiClienti();  
    if (c.moveToFirst())
    {
      do {
        VisualizzaCliente(c);
      } while (c.moveToNext());
    }
    db.close();    
  }

  /*
  Definisco un metodo per la copia del DB
  */
  public void CopyDB(InputStream inputStream,OutputStream outputStream) throws IOException {
    byte[] buffer = new byte[1024];
    int length;
    while ((length = inputStream.read(buffer)) > 0) {
      outputStream.write(buffer, 0, length);
    }
    inputStream.close();
    outputStream.close();
  }

  /*
  Definisco un metodo per la stampa del record
  */    
  public void VisualizzaCliente(Cursor c) {
    Toast.makeText(this,
    "id: " + c.getString(0) + "n" +
    "Nome: " + c.getString(1) + "n" +
    "Indirizzo: " + c.getString(2),
    Toast.LENGTH_LONG).show();
  }
}

Quando l’applicazione viene avviata per prima cosa il database TestDB viene copiato dalla cartella

assets

alla cartella

/data/data/com.example.testdatabase/databases

tramite il metodo CopyDB

E’ importante, prima di effettuare questa operazione, cancellare eventuali altri database presenti in questa cartella tramite la vista DDMS.

Vi faccio notare, infatti, che il file viene copiato solo se nella cartella non esiste già un database con lo stesso nome. Se non facessimo questo controllo ogni volta che viene avviata l’applicazione il contenuto del database effettivo verrebbe sovrascritto con quello del database originario presente nella cartella assets.

Una volta creato il database è possibile utilizzare sullo stesso tutti i metodi definiti nella classe GestioneDB, nello stesso modo visto nelle lezioni precedenti. Nell’ultimo esempio abbiamo utilizzato il metodo ottieniTuttiClienti, allo stesso modo potremmo utilizzare tutti gli altri metodi all’interno della suddetta classe.

Pubblicità

In questa guida...