La base de données SQLite avec Android

Fabien Brissonneau
Fabien Brissonneau Ajouter un commentaire 4e lecture en min
Les accès aux données sous Android peuvent être réalisés de plusieurs façons. Les fichiers, privés ou non, les accès réseaux, propriétaires ou via le Cloud… et la base de données SQL. La base de données SQLite est disponible sous Android, et via quelques classes, nous avons tous les outils pour créer, écrire et lire la base. La création de la base et sa mise à jour Pour créer la base de données, mieux vaut utiliser les outils qui existent… et pour cela dériver la classe SQLiteOpenHelper. Vous aurez à compléter deux hook : la création, la mise à jour. Lors de la création, il faudra créer les tables, pour la mise à jour, le plus simple (oui oui) sera de supprimer les tables et de les recréer. Dans l’exemple de code suivant, des constantes statiques représentent les noms des base, tables et colonnes, version . Les noms des colonnes sont publiques, ce qui facilitera leur usage.
public class DataHelper extends SQLiteOpenHelper{

    public static final String NOM="nom";
    public static final String ADRESSE="adresse";

    private static final String DATABASE_NAME="appdatas";
    private static final int DATABASE_VERSION=1;
    private static final String CLIENT_TABLE_NAME="clients";
    private static final String CLIENT_TABLE_CREATE =
            "CREATE TABLE "+CLIENT_TABLE_NAME+
            "("+NOM+" TEXT, "+ADRESSE+" TEXT);";

    public DataHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(CLIENT_TABLE_CREATE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS "+CLIENT_TABLE_NAME);
        onCreate(db);
    }
}
L’insertion des données La première chose à faire sera de créer un objet du type SQLiteOpenHelper. Attention, comme vous avez créé votre propre classe dérivée, ce sera cette classe à qu’il faudra utiliser.
DataHelper db = new DataHelper(this);
Pour insérer des données, il y a plusieurs façons de pratiquer. Il est possible d’utiliser des méthodes toutes faites ! Il faudra auparavant ouvrir une connexion à la base en utilisant getWritableDatabase(). Une fois l’insertion réalisée, vous obtenez en retour le nombre d’enregistrement inséré, ou bien -1 pour signaler un échec. Dans l’exemple suivant, l’insertion est faite via la méthode insert(…) en fournissant les données sous la forme de tableau associatif appelé ici ContentValues. La fermeture de la connexion n’est pas oubliée.
SQLiteDatabase base = db.getWritableDatabase();

ContentValues ct= new ContentValues();
ct.put(DataHelper.NOM,"Rasori Ets");
ct.put(DataHelper.ADRESSE,"Saint-Georges-sur-Eure");
base.insert("clients", null, ct);

ct= new ContentValues();
ct.put(DataHelper.NOM,"Alphorm");
ct.put(DataHelper.ADRESSE,"Créteil");
base.insert("clients", null, ct);

base.close();
La récupération des données Pour lire les tables, le chemin inverse doit être réalisé. Tout d’abord ouvrir une connexion en lecture. Pour faire une requête. Vous pouvez faire la requête en utilisant directement du SQL, ou bien passer par les méthodes « aidantes » comme query(…). Le résultat est un Cursor, c’est-à-dire un accès aux données de résultat. Une sorte d’itérateur sur resultset. Il faut alors se positionner sur le premier enregistrement, puis avancer tant que vrai. Dans le code suivant, vous voyez que le résultat sert à alimenter un ArrayAdapter, car les ligne sont affichées dans une ListView. Le code xml qui suit est celui de l’interface graphique.
ListView liste = (ListView)findViewById(R.id.liste);
ArrayAdapter donnees = new ArrayAdapter(MainActivity.this, android.R.layout.simple_list_item_1);

SQLiteDatabase base = db.getReadableDatabase();

Cursor clients = base.query("clients",
        new String[]{DataHelper.NOM,DataHelper.ADRESSE},
        null,null,null,null,null);
if(clients.moveToFirst())
    do {
        String str = clients.getString(0)+ " -> "+clients.getString(1);
        donnees.add(str);
    }while(clients.moveToNext());

liste.setAdapter(donnees);

base.close();
L’interface graphique correspond à :
<code>
<button></button>
<button></button>
</code>
Conclusion Sous Android, il est possible de penser les données façon base de données relationnelle. Pour cela, utilisez SQLite et gérer vos connexions, vos insertions, et requêtes avec SQL.
Partager cet article
Par Fabien Brissonneau Expert en Conception et Développement sur Java et DotNet avec 15 Ans d'Expérience
Fabien, expert en développement, conception et architecture sur les plateformes Java et DotNet, offre ses services depuis plus de 15 ans. Fort de son expérience en C++, il excelle également dans le domaine de la mobilité, ayant créé avec succès des outils pour Android et Windows Phone, certains étant même publiés. En plus de son travail, il consacre une part significative de son temps à la formation, partageant ainsi son expertise avec les acteurs clés de l'industrie. Pour tout ce qui concerne la conception orientée objet sur les plateformes Java et DotNet, Fabien est votre expert de confiance.
Laisser un commentaire