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

الموضوع في 'برمجة تطبيقات الهواتف الذكية' بواسطة crytex, بتاريخ ‏31 جانفي 2016.

الوسوم:
  1. crytex

    crytex مراقب سابق

    إنضم إلينا في:
    ‏5 أوت 2009
    المشاركات:
    14.896
    الإعجابات المتلقاة:
    25.221
      31-01-2016 11:59
    [​IMG]

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

    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
     
    آخر تعديل: ‏17 فيفري 2016
    Bechir85 ،streamingall ،ismail1989 و 9آخرون معجبون بهذا.
  2. crytex

    crytex مراقب سابق

    إنضم إلينا في:
    ‏5 أوت 2009
    المشاركات:
    14.896
    الإعجابات المتلقاة:
    25.221
      31-01-2016 12:16
    [​IMG]

    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:
     
    Wael Manai ،Bechir85 ،ismail1989 و 8آخرون معجبون بهذا.
  3. crytex

    crytex مراقب سابق

    إنضم إلينا في:
    ‏5 أوت 2009
    المشاركات:
    14.896
    الإعجابات المتلقاة:
    25.221
      31-01-2016 13:55
    [​IMG]

    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
     
    آخر تعديل: ‏31 جانفي 2016
    Bechir85 ،tarek-ayadi ،ismail1989 و 7آخرون معجبون بهذا.
  4. crytex

    crytex مراقب سابق

    إنضم إلينا في:
    ‏5 أوت 2009
    المشاركات:
    14.896
    الإعجابات المتلقاة:
    25.221
      31-01-2016 14:04
    [​IMG]

    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


     
    آخر تعديل: ‏31 جانفي 2016
    Wael Manai ،Bechir85 ،ismail1989 و 7آخرون معجبون بهذا.
  5. crytex

    crytex مراقب سابق

    إنضم إلينا في:
    ‏5 أوت 2009
    المشاركات:
    14.896
    الإعجابات المتلقاة:
    25.221
      31-01-2016 14:19
    [​IMG]

    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

    ;)


     

    الملفات المرفقة:

    helmi_87 ،kaket ،HIRIMIS و 11آخرون معجبون بهذا.
  6. achraf.b13

    achraf.b13 كبير مسؤولي منتدى الكمبيوتر والانترنت طاقم الإدارة

    إنضم إلينا في:
    ‏23 مارس 2010
    المشاركات:
    8.720
    الإعجابات المتلقاة:
    17.595
      31-01-2016 16:06
    مشكور شرح رائع و ممتاز بارك الله فيك

    تم التقييم

    [​IMG] [​IMG] [​IMG] [​IMG] [​IMG]
     
    med0101 ،Daoud Mariem و crytex معجبون بهذا.
  7. Norchene

    Norchene ARCHITECTE UML

    إنضم إلينا في:
    ‏30 ديسمبر 2014
    المشاركات:
    178
    الإعجابات المتلقاة:
    319
      31-01-2016 17:25
    très bon travail, bravo vous méritez votre place dans le forum
    :am-applause::am-applause::am-applause:
     
    med0101 و crytex معجبون بهذا.
  8. Aly N'SIBI

    Aly N'SIBI كبار الشخصيات

    إنضم إلينا في:
    ‏15 جويلية 2008
    المشاركات:
    10.683
    الإعجابات المتلقاة:
    27.679
      01-02-2016 10:31
    med0101 و crytex معجبون بهذا.
  9. L S INFO

    L S INFO عضو نشيط

    إنضم إلينا في:
    ‏8 أكتوبر 2013
    المشاركات:
    248
    الإعجابات المتلقاة:
    133
      01-02-2016 14:31
    SVP j'est cette erreur sur l'AVD de l'andoid studio
     

    الملفات المرفقة:

  10. crytex

    crytex مراقب سابق

    إنضم إلينا في:
    ‏5 أوت 2009
    المشاركات:
    14.896
    الإعجابات المتلقاة:
    25.221
      01-02-2016 19:26
    Vous avez un problème avec votre pilote graphique
    Désinstallez le pilote puis réinstallez le de nouveau
     
    ismail1989 و L S INFO معجبون بهذا.

مشاركة هذه الصفحة

جاري تحميل الصفحة...