Connecter une application Android à une base de donnée SqlLite

crytex

مراقب سابق
إنضم
5 أوت 2009
المشاركات
14.234
مستوى التفاعل
25.223


أهلا و سهلا بكافّة الإخوة الأعضاء والزوار في منتديات تونيزيا سات

Grâce à ce tutoriel on va voir ensemble comment connecter une application android avec une base de données SqlLite

Avant de lire ce tutoriel vous devez jeter un coup d’œil sur ces sujets pour comprendre la structure et les éléments de base du développement des applications Android
Développer votre première application Android avec Android Studio
+
حصريا على تونيزيا سات شروحات فيديو لتطوير تطبيقات الأندرويد


Pendant ce tutoriel je vais expliquer chaque méthode à part puis je je vais poster la totalité du code dans une balise CODE

logo.png
 
التعديل الأخير:

crytex

مراقب سابق
إنضم
5 أوت 2009
المشاركات
14.234
مستوى التفاعل
25.223


Pendant cette partie on va créer un nouveau projet Android classique avec Android studio, les étapes sont les suivantes

On commence par créer un nouveau projet et on donne un nom à ce dernier

1.png

On choisit comme catégorie Phone & tablet et on choisit le Min SDK de notre application e t on appui sur NEXT


2.png

On choisit Blank activity et on appui sur NEXT

3.jpg

On donne un nom à notre main activity et on appui sur finish

4.jpg

Finalement le projet est chargé, on peut maintenant commencer à code

5.jpg


:sm-type:
 

crytex

مراقب سابق
إنضم
5 أوت 2009
المشاركات
14.234
مستوى التفاعل
25.223


Pendant cette partie on va créer la classe java personne qui contient les attributs nécessaire qu'on va ajouter dans la base de donnée

Dans cette application une personne est caractérisée par un numéro CIN, NOM et PRENOM

On ajoute cette classe JAVA

1.jpg

On nomme la classe

2.jpg


La classe Java sera comme suit

PS: il faut pas oublier les constructeurs et les getters & setters des attributs


Java:
package com.example.hassan.sqllite;

/**
* Created by crytex on 31/01/2016.
*/
public class Personne {

    private int cin;
    private String nom;
    private String prenom;

    public Personne(){

    }

    public Personne(String prenom, int cin, String nom) {
        this.prenom = prenom;
        this.cin = cin;
        this.nom = nom;
    }

    public int getCin() {
        return cin;
    }

    public void setCin(int cin) {
        this.cin = cin;
    }

    public String getNom() {
        return nom;
    }

    public void setNom(String nom) {
        this.nom = nom;
    }

    public String getPrenom() {
        return prenom;
    }

    public void setPrenom(String prenom) {
        this.prenom = prenom;
    }
}
Maintenant pour pouvoir effectuer les requêtes CRUD Create Read, Update et Delete il faut ajouter un DataBaseHandler
On ajoute cette classe


1.jpg

On la nomme comme suit

3.jpg


Dans la première partie de notre classe on doit définir les informations nécessaires pour pouvoir créer la table

Voici la partie du code commenté


Java:
package com.example.hassan.sqllite;

        import android.content.ContentValues;
        import android.content.Context;
        import android.database.Cursor;
        import android.database.sqlite.SQLiteDatabase;
        import android.database.sqlite.SQLiteOpenHelper;
        import java.util.ArrayList;
        import java.util.List;

public class DBHandler extends SQLiteOpenHelper {

    // la version de notre BD
    private static final int DATABASE_VERSION = 1;

    // Le nom de la BD
    private static final String DATABASE_NAME = "personnesInfo";

    // le nom de la table personne
    private static final String TABLE_PERSONNES = "personnes";

    // les noms des colonnes de la table personnes
    private static final String KEY_ID = "cin";
    private static final String KEY_NOM = "nom";
    private static final String KEY_PRENOM= "prenom";

Par la suite on va implémenter deux méthodes de nouveau qui sont OnCreate qui sera exécutée quand la base de donnée sera créée pour la première fois et OnUpgrade qui sera executée quant il y a une modification dans la base

Java:
    public DBHandler(Context context) {

        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String CREATE_PERSONNES_TABLE = "CREATE TABLE " + TABLE_PERSONNES + "("+ KEY_ID + " INTEGER PRIMARY KEY," + KEY_NOM + " TEXT,"+ KEY_PRENOM + " TEXT" + ")";
        db.execSQL(CREATE_PERSONNES_TABLE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // supprimer la table si elle existe
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_PERSONNES);
        // creer la table de nouveau
        onCreate(db);
    }
Dans l'étape suivante on va implémenter les méthodes CRUD

PS: on reste toujours dans la mème classe DBHandler
 
التعديل الأخير:

crytex

مراقب سابق
إنضم
5 أوت 2009
المشاركات
14.234
مستوى التفاعل
25.223


On va maintenant implémenter les 4 méthodes CRUD
Create, Read, Update, Delete


Voici le code commenté
Java:
// Ajout d'une personne
    public void addPersonne(Personne personne) {
        SQLiteDatabase db = this.getWritableDatabase();

        ContentValues values = new ContentValues();

        // cin de la personne
        values.put(KEY_ID, personne.getCin());

        // nom de la personne
        values.put(KEY_NOM, personne.getNom());

        // prenom de la personne
        values.put(KEY_PRENOM, personne.getPrenom());

        // Insertion des lignes
        db.insert(TABLE_PERSONNES, null, values);

        //Fermeture de la connexion à la BD
        db.close();
    }

    // recuperer une personne
    public Personne getPersonne(int id) {
        SQLiteDatabase db = this.getReadableDatabase();

        Cursor cursor = db.query(TABLE_PERSONNES, new String[]{KEY_ID,
                        KEY_NOM, KEY_PRENOM}, KEY_ID + "=?",
                new String[]{String.valueOf(id)}, null, null, null, null);
        if (cursor != null)
            cursor.moveToFirst();

        Personne personne = new Personne(cursor.getString(2),cursor.getInt(0), cursor.getString(1));
        // returner personne
        return personne;
    }

    // recuperer toutes les personnes
    public List<Personne> getAllPersonnes() {
        List<Personne> personnesList = new ArrayList<Personne>();
        // Select All Query
        String selectQuery = "SELECT  * FROM " + TABLE_PERSONNES;

        SQLiteDatabase db = this.getWritableDatabase();
        Cursor cursor = db.rawQuery(selectQuery, null);

        // on fait une boucle pour remplir la liste
        if (cursor.moveToFirst()) {
            do {
                Personne personne = new Personne();
                personne.setCin(cursor.getInt(0));
                personne.setNom(cursor.getString(1));
                personne.setPrenom(cursor.getString(2));
                // ajout de la personne dans la liste
                personnesList.add(personne);
            } while (cursor.moveToNext());
        }

        // retourner la liste remplit
        return personnesList;
    }

    // Recuperer le nombre denregistrements
    public int getPersonneCount() {
        String countQuery = "SELECT  * FROM " + TABLE_PERSONNES;
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor cursor = db.rawQuery(countQuery, null);
        cursor.close();

        // return count
        return cursor.getCount();
    }

    // Mise a jour d'une personne
    public int updatePersonne(Personne personne) {
        SQLiteDatabase db = this.getWritableDatabase();

        ContentValues values = new ContentValues();
        values.put(KEY_NOM, personne.getNom());
        values.put(KEY_PRENOM, personne.getPrenom());

        // mise a jour
        return db.update(TABLE_PERSONNES, values, KEY_ID + " = ?",new String[]{String.valueOf(personne.getCin())});
    }

    // suppression des peronnes
    public void deletePersonne() {
        SQLiteDatabase db = this.getWritableDatabase();
        db.execSQL("delete from "+ TABLE_PERSONNES);
        db.close();
    }
Dans ce tutoriel on va pas utiliser toutes les méthodes, on va juste utiliser l'ajout, la suppression (dés l’ouverture de l'application) et l'affichage
Read

Donc la totalité de la classe DBHandler sera comme suit

Java:
package com.example.hassan.sqllite;

        import android.content.ContentValues;
        import android.content.Context;
        import android.database.Cursor;
        import android.database.sqlite.SQLiteDatabase;
        import android.database.sqlite.SQLiteOpenHelper;
        import java.util.ArrayList;
        import java.util.List;

public class DBHandler extends SQLiteOpenHelper {

    // la version de notre BD
    private static final int DATABASE_VERSION = 1;

    // Database Name
    private static final String DATABASE_NAME = "personnesInfo";

    // le nom de la table personne
    private static final String TABLE_PERSONNES = "personnes";

    // les noms des colonnes de la table personnes
    private static final String KEY_ID = "cin";
    private static final String KEY_NOM = "nom";
    private static final String KEY_PRENOM= "prenom";

    public DBHandler(Context context) {

        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String CREATE_PERSONNES_TABLE = "CREATE TABLE " + TABLE_PERSONNES + "("
                + KEY_ID + " INTEGER PRIMARY KEY," + KEY_NOM + " TEXT,"
                + KEY_PRENOM + " TEXT" + ")";
        db.execSQL(CREATE_PERSONNES_TABLE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // supprimer la table si elle existe
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_PERSONNES);
        // creer la table de nouveau
        onCreate(db);
    }

    // Ajout d'une personne
    public void addPersonne(Personne personne) {
        SQLiteDatabase db = this.getWritableDatabase();

        ContentValues values = new ContentValues();

        // cin de la personne
        values.put(KEY_ID, personne.getCin());

        // nom de la personne
        values.put(KEY_NOM, personne.getNom());

        // prenom de la personne
        values.put(KEY_PRENOM, personne.getPrenom());

        // Insertion des lignes
        db.insert(TABLE_PERSONNES, null, values);

        //Fermeture de la connexion à la BD
        db.close();
    }

    // recuperer une personne
    public Personne getPersonne(int id) {
        SQLiteDatabase db = this.getReadableDatabase();

        Cursor cursor = db.query(TABLE_PERSONNES, new String[]{KEY_ID,
                        KEY_NOM, KEY_PRENOM}, KEY_ID + "=?",
                new String[]{String.valueOf(id)}, null, null, null, null);
        if (cursor != null)
            cursor.moveToFirst();

        Personne personne = new Personne(cursor.getString(2),cursor.getInt(0), cursor.getString(1));
        // returner personne
        return personne;
    }

    // recuperer toutes les personnes
    public List<Personne> getAllPersonnes() {
        List<Personne> personnesList = new ArrayList<Personne>();
        // Select All Query
        String selectQuery = "SELECT  * FROM " + TABLE_PERSONNES;

        SQLiteDatabase db = this.getWritableDatabase();
        Cursor cursor = db.rawQuery(selectQuery, null);

        // on fait une boucle pour remplir la liste
        if (cursor.moveToFirst()) {
            do {
                Personne personne = new Personne();
                personne.setCin(cursor.getInt(0));
                personne.setNom(cursor.getString(1));
                personne.setPrenom(cursor.getString(2));
                // ajout de la personne dans la liste
                personnesList.add(personne);
            } while (cursor.moveToNext());
        }

        // retourner la liste remplit
        return personnesList;
    }

    // Recuperer le nombre denregistrements
    public int getPersonneCount() {
        String countQuery = "SELECT  * FROM " + TABLE_PERSONNES;
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor cursor = db.rawQuery(countQuery, null);
        cursor.close();

        // return count
        return cursor.getCount();
    }

    // Mise a jour d'une personne
    public int updatePersonne(Personne personne) {
        SQLiteDatabase db = this.getWritableDatabase();

        ContentValues values = new ContentValues();
        values.put(KEY_NOM, personne.getNom());
        values.put(KEY_PRENOM, personne.getPrenom());

        // mise a jour
        return db.update(TABLE_PERSONNES, values, KEY_ID + " = ?",new String[]{String.valueOf(personne.getCin())});
    }

    // suppression des peronnes
    public void deletePersonne() {
        SQLiteDatabase db = this.getWritableDatabase();
        db.execSQL("delete from "+ TABLE_PERSONNES);
        db.close();
    }
}
On passe maintenant à la classe MainActivity où on va insérer les données dans la BD

Le code de cette classe est le suivant

Java:
package com.example.hassan.sqllite;

import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import java.util.List;

public class MainActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        DBHandler db = new DBHandler(this);

        db.deletePersonne();
        // Insertion des données
        Log.d("Insert: ", "Insertion en cours ..");
        db.addPersonne(new Personne("crytex", 11111, "crytex"));
        db.addPersonne(new Personne("user1",22222,"user1"));
        db.addPersonne(new Personne("user2",33333,"user2"));
        db.addPersonne(new Personne("user3",44444,"user3"));

        // lecture des personnes
        Log.d("Lecture: ", "Lecture des personnes..");
        List<Personne> personnes = db.getAllPersonnes();

        for (Personne personne : personnes) {
            String log = "Id: " + personne.getCin() + " ,Nom: " + personne.getNom() + " ,Prenom: " + personne.getPrenom();
            // ecriture dans la fenetre log
            Log.d("Personnes: ", log);
        }
    }
}


Dans ce code j'ai ajouté 4 personnes et puis j'ai essayé de les récupérer depuis la base de données


 
التعديل الأخير:

crytex

مراقب سابق
إنضم
5 أوت 2009
المشاركات
14.234
مستوى التفاعل
25.223


On va maintenant tester notre travail, j'ai pas changé la partie graphique, ce qui nous intéresse c'est la partie persistance et base de donnée pour le moment

On commencer par lancer l'application

4.jpg

L'AVD sera lancé


Capture.JPG

On va maintenant vérifier logcat pour voir les messages d'insertion

5.jpg

On ouvre l'anglet Logcat

Ajout et récupération des données effectués avec succès


;)


6.jpg

On arrive à la fin du tutoriel, j'éspere que j'ai bien expliqué le code et les étapes nécessaires pour intégrer la base de donnée SqlLite

Je suis disponible pour répondre à toutes vos questions

;)


 

المرفقات

achraf.b13

كبير مسؤولي منتدى الكمبيوتر والانترنت
طاقم الإدارة
إنضم
23 مارس 2010
المشاركات
8.727
مستوى التفاعل
17.640
مشكور شرح رائع و ممتاز بارك الله فيك

تم التقييم

 
أعلى