Facebook Twitter Google Plus RSS Feed Email

    dimanche 24 novembre 2013

    [Tutoriel] :SQLite Android Tutoriel

    Bienvenue ,voici le nouvel tutoriel qui s'intéresse sur la création des bases de données sous Android pour stocker des données . En effet , plusieurs  application ont besoin de stocker des données. : La simple méthode c'est d'utiliser SQLite
    .Les bases de données ,que vous créez, seront accessibles par le nom à une classe dans l'application, mais pas en dehors de l'application. Ici, nous allons voir comment utiliser l'API SQLite pour effectuer des opérations courantes de base de données. Smiley
    On va voir :
    • Comment commencer à utiliser l'API SQLite?
    • Comment créer de nouvelles tables de base de données et base de données?
    • Comment effectuer les opérations CRUD " C reate R ead, U pdate et D elete " ?
    Pour les curieux voici l'architecture générale : (& pour plus des informations visiter SQLite )

    ... & Après ?

    Nous allons construire une application qui permet de stocker et récupérer des informations d'une base . Notre application sera un peu générale ( vous pouvez l'utiliser et la modifier selon vos besoins : N'oubliez GNU Smiley. )


    Notre projet va contenir 3 classes :


    1. Exemple.java : Classe qui contient toutes les méthodes getter et setter pour maintenir un exemple de d'information ( ex: livre[id, titre,auteur,prix] etc. )unique comme un objet.
    2. MainActivity.java : Classe principale 
    3. SQLiteDatabaseHandler.java : Classe pour gérer tous les opérations CRUD de notre  base de données (Create, Read, Update et Delete) .


      1. Création d'un nouveau projet :

      Alors pour commencer cliquez sur File >>> New >>> Android Application Project. Il se peut que le menu Android Project ne soit pas directement disponible, il faut alors faire File >>> New >>> Other… >>> Android >>>Android Application Project. Une fenêtre de création de nouveau projet Android va s’ouvrir et vous devrez y renseigner le nom du projet, la version minimal du SDK, le nom de l’application etc.

      - Nom de l'application: SQL Exemple EAC
      - Nom du projet: SQLExempleEAC
      -Nom de package: eac.tutoriel.sqlite

      2. Création de la classe Exemple.java :

      Classe qui contient toutes les méthodes getter et setter de maintenir un exemple de d'information  unique comme un objet.
      Dans notre cas , on va définir des variables générales (col1, col2, col3, col4 )
      Les col_i peuvent êtres la signification de vos données (prix, id, nom, age etc. )
      On va générer les méthodes getters et setters des variables (Shift+Alt+S, puis source puis generate getters and setters , cocher les variables puis Ok  Smiley) ,enfin on va créer 2 constructeurs dont l'un est vide
      Exemple.java:

      package eac.tutoriel.sqlite;
      public class Exemple {
      // variables privées
      int col1;
      String col2;
      String col3;
      String col4;
      //Constructeur vide
      public Exemple(){}
      //Constructeur
      public Exemple(String col2, String col3, String col4) {
      super();
      this.col2 = col2;
      this.col3 = col3;
      this.col4 = col4;
      }
      //les méthodes getter & sette
      public int getCol1() {
      return col1;
      }
      public void setCol1(int col1) {
      this.col1 = col1;
      }
      public String getCol2() {
      return col2;
      }
      public void setCol2(String col2) {
      this.col2 = col2;
      }
      public String getCol3() {
      return col3;
      }
      public void setCol3(String col3) {
      this.col3 = col3;
      }
      public String getCol4() {
      return col4;
      }
      public void setCol4(String col4) {
      this.col4 = col4;
      }
      @Override
      public String toString() {
      return "Exemple [col1=" + col1 + ", col2=" + col2 + ", col3=" + col3
      + ", col4=" + col4 + "]";
      }

      }

      3. Création de la classe SQLiteDatabaseHandler.java :


      Classe qui s'étend de SQLiteOpenHelper pour gérer tous les opérations CRUD de notre  base de données (Create, Read, Update et Delete) .



      public class SQLiteDatabaseHandler extends SQLiteOpenHelper{ }


      Ajouter les méthodes onCreate() [pour la créer la base] ,onUpgrade() [pour la mise à niveau de la base ], et le constructeur :

      public class SQLiteDatabaseHandler extends SQLiteOpenHelper{
      @Override
      public void onCreate(SQLiteDatabase arg0) {
      // TODO Auto-generated method stub
      }
      @Override
      public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
      // TODO Auto-generated method stub
       }

      Créons maintenant de constantes de types chaîne de caractères  : l'un qui contient le nom de la base l'autre sa version:

      //Version base de données
      private static final int DATABASE_VERSION = 1;
      // Nom du base
      private static final String DATABASE_NAME = "BaseExemple";
      //Constructeur
      public SQLiteDatabaseHandler(Context context) {
      super(context, DATABASE_NAME, null, DATABASE_VERSION);
       }

      * Dans la méthode onCreate() , on va créer notre table : TableExemple avec 4 colonnes (col1:int, col2,col3,col4: String ):

      @Override
      public void onCreate(SQLiteDatabase db) {
      // commande SQL pour Créer la table:TableExemple(col1,col2,col3,col4)
      String CREATION_TABLE_EXEMPLE = "CREATE TABLE TableExemple ( " +
      "col1 INTEGER PRIMARY KEY AUTOINCREMENT, " +
      "col2 TEXT, "+
      "col3 TEXT, "+
      "col4 TEXT )";
      // creation de la table :TableExemple
      db.execSQL(CREATION_TABLE_EXEMPLE);
       }

      *Dans la méthode onUgrade() : on va supprimer la table de la base (S'elle existe) et on crée une autre vide (renouvellemnt ):

      @Override
      public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
      // supprimer la table s'elle existe
      db.execSQL("DROP TABLE IF EXISTS TableExemple");
      // creation d'une nouvelle table vide
      this.onCreate(db);
      }

      A cette étape nous avons créer notre base avec sa table vide , il nous reste que les opérations sur les données (Supprimer,Ajouter,Afficher, Modifier).
      Alors on va ajouter 5 méthodes : Smiley 

      * ajoutExemple(Exemple ex)
      * modifer(Exemple ex)
      * supprimer(Exemple ex)
      * affiche(Int col1)
      * afficheTout()

      Avant tout , pour faciliter le codage ,on va créer des variables :
      // Les noms du Colonnes de la table 
          private static final String KEY_COL1 = "col1";
          private static final String KEY_COL2 = "col2";
          private static final String KEY_COL3 = "col3";
          private static final String KEY_COL4 = "col4";
          private static final String[] COLONNES= {KEY_COL1,KEY_COL2,KEY_COL3,KEY_COL4};

       1. ajoutExemple(Exemple ex):

      On va utiliser ConentValues : ​​cette classe est utilisée pour stocker un ensemble de valeurs.

      public void ajoutExemple(Exemple ex) {
      Log.d("ajoutExemple :", ex.toString()); 
      // 1.obtenir l'accée à la base
      SQLiteDatabase db = this.getWritableDatabase();
      // 2. creation d'un ContentValues pour ajouter une ligne dans la base (col2,col3,col4)
      ContentValues values = new ContentValues();
      values.put(KEY_COL2, ex.getCol2()); // obtenir col2 (get col2)
      values.put(KEY_COL3, ex.getCol3()); // get col3
      values.put(KEY_COL4, ex.getCol4()); // get col4
      // 3. insertion
      db.insert("TableExemple", // table
      null, //nullColumnHack
      values); // les valeurs
      // 4. fermer la connexion
      db.close();
       }


      2. modifier(Exemple ex):

      C'est presque comme l'ajout , mais on va mettre à jour une ligne de la table à partir de son clé primaire (col1 :int) :Smiley
      public int modifier(Exemple ex) {
      // 1. get reference to writable DB
      SQLiteDatabase db = this.getWritableDatabase();
      // 2. creation d'unContentValues
      ContentValues values = new ContentValues();
      values.put("col2", ex.getCol2());
      values.put("col3", ex.getCol3());
      values.put("col4", ex.getCol4());
      // 3. mise à jour une ligne
      int i = db.update("TableExemple", //table
      values, // column/value
      "col1 = ?", // selections
      new String[] { String.valueOf(ex.getCol1()) }); //selection args
      // 4. fermer la connexione
      db.close();
      return i;
      }


      3. supprimer(Exemple ex):

      Méthode qui permet  de supprimer une ligne de la table à partir de col1 (expemple : Id):


      public void supprimer(Exemple ex) {


      // 1. get reference to writable DB

      SQLiteDatabase db = this.getWritableDatabase();
      // suppression
      db.delete("TableExemple", //nom de la table
      "col1 = ?",
      new String[] { String.valueOf(ex.getCol1()) }); //selections args
      db.close();
      //log
      Log.d("delete: ", ex.toString());
      }

            4. afficherTout():

    Méthode qui permet de mettre tout les données de la table dans une liste , et la retourne.

    public List<Exemple> afficheTout() {
    List<Exemple> exemples = new LinkedList<Exemple>();
    // 1. la commande SQL
    String query = "SELECT  * FROM TableExemple";
    // 2. accée à la base
    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery(query, null);
    // 3. parcourir chaque ligne et l'ajout dans la liste
    Exemple ex = null;
    if (cursor.moveToFirst())
    {
    do {
    ex = new Exemple();
    ex.setCol1(Integer.parseInt(cursor.getString(0)));
    ex.setCol2(cursor.getString(1));
    ex.setCol3(cursor.getString(2));
    ex.setCol4(cursor.getString(3));
    // ajouter les inforamtions de chque ligne à la liste EXEMPLES
    exemples.add(ex);
    } while (cursor.moveToNext());
    }
    Log.d("afficherTout()", exemples.toString());
    // retourner les données enregistrées dans la table
    return exemples;
    }

          5. afficher(int col1):

    Méthode qui permet d'afficher les données d'une ligne à partir sa la clé primaire

    public Exemple afficher(int col1){
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor =
    db.query("TableEexemple", // a. table
    COLONNES, // b. column names
    " col1 = ?", // c. selections
    new String[] { String.valueOf(col1) }, // d. selections args
    null, // e. group by
    null, // f. having
    null, // g. order by
    null); // h. limit
    if (cursor != null)
    cursor.moveToFirst();
    Exemple ex = new Exemple();
    ex.setCol1(Integer.parseInt(cursor.getString(0)));
    ex.setCol2(cursor.getString(1));
    ex.setCol3(cursor.getString(2));
    ex.setCol4(cursor.getString(3));
    //log
    Log.d("afficher("+col1+")", ex.toString()) ;
    return ex;
    }


    4. MainActivity.java :
    Dans le MainActivity , on peut tout faire Smiley , pour moi j'ai écrit :

    public class MainActivity extends Activity {
    SQLiteDatabaseHandler db;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    db=new SQLiteDatabaseHandler(this);
    db.ajoutExemple(new Exemple("enis","android","club"));//ligne1
    db.ajoutExemple(new Exemple("ENIS","ANDROID","CLUB"));//ligne2
    List<Exemple> list = db.afficheTout();
    }
    }

    et mon résultat s'affiche dans LogCat : Smiley 










    Vous pouvez tout faire et adapter cette tutoriel dans votre application , et n'hésitez pas de poser des questions  si vous avez un problème  Smiley


    1 commentaire:

    1. Bonjour, j'ai suivi pas à pas tout le tutoriel (je suis complètement débutante) et ça fonctionne. Petite question (peut être bête) comment faire pour afficher la table créé dans une vue? que ce soit champs par champs ou sous forme de tableau?
      Merci pour votre aide!

      RépondreSupprimer

    Sauvegarder le lien

    Twitter Delicious Facebook Digg Stumbleupon Favorites More

    Recherche

    Pages vues

    Articles populaires

    Notre page facebook

    Libellés

    Tutoriel (17) Android (12) Activite (10) Actualite (6) Event (5) 2014 (3) Compétition (2) MySQL (2) json (2) php (2) webservices (2) APK (1) Design (1) Formation (1) KitKat (1) SIB (1) Securité (1) sfax (1)
    Copyright © ENIS Android Club