SQLite sous android

24 views
Skip to first unread message

Aristos

unread,
Jul 28, 2013, 4:33:14 PM7/28/13
to congo-androi...@googlegroups.com
Bonsoir, Patrick!

J'ai un grand souci! Je voudrai utilisé un sgbd : SQLite sous Android.
Cependant je me casse la figure, c'est ma troisième tentative depuis que j'avais commencé. C'est toujours en vain.

J'ai suivi toutes les étape du livre l'Art du développement Android et  celle du livre professional_android_application_development, mais rien n'est ok!

J'ai besoin de votre aide: Voici toutes les classes que j'ai utilisé, où se trouve le problème ?

Si vous avez un exemple qui tourne, pouvez-vous me passer le modèle ?

Classe Contact:

package com.aris.tp_sqlite;

public class Contact {
    private int id;
    private String nom;
    private String numTelephone;

    public Contact() {
    }

    public Contact(String nom, String numTelephone) {
        this.nom = nom;
        this.numTelephone = numTelephone;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getNom() {
        return nom;
    }

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

    public String getNumTelephone() {
        return numTelephone;
    }

    public void setNumTelephone(String numTelephone) {
        this.numTelephone = numTelephone;
    }

}

Classe d'accès à la base de données

package com.aris.tp_sqlite;

import java.sql.SQLException;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class ContactBD {
   
        private static final String NOM_BD ="GestionContact";    // Nom de la base de données
        private static final String TABLE_CONTACT="CONTACTS";       // Nom de la table
        private static final int VERSION_BD = 1;                 // Version de la base de données
       
        // L'instance de la base qui sera manipulée au travers cette classe
        private SQLiteDatabase maBaseDonnees;
               
        // Context de l'application utilisant la BDD
        private final Context context;
   
        public static final int NUM_COL_ID = 0;
        public static final String COL_ID = "id";
       
        public static final int NUM_COL_NOM = 1;
        public static final String COL_NOM = "nom";
       
        public static int NUM_COL_NumTel = 2;
        public static String COL_NUM_TEL ="NumTelephone";
       
        // La requête de création de la structure de la base de données.
        private static class contactDBOpenHelper extends SQLiteOpenHelper{

            public contactDBOpenHelper(Context context, String name, CursorFactory factory, int version) {
                super(context, name, factory, version);
            }
           
            // Requête de création de la base données
            private static final String CREATION_BD = "CREATE TABLE " +
                    TABLE_CONTACT + "("+ COL_ID + " int primary key autoincrement, "
                                         + COL_NOM + " text not null, "
                                       + COL_NUM_TEL + " text not null " + ");";

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

            @Override
            public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
                 Log.w("TaskDBAdapter", "Upgrading from version " + oldVersion + "to" + newVersion + ", which will destroy all old data");
                 
                 db.execSQL("DRPO TABLE IF EXISTS"+ TABLE_CONTACT + ";");
                 onCreate(db);   
            }
        }
       
        private contactDBOpenHelper dbHelper;
       
        public ContactBD(Context _context) {
            context = _context;
            //On crée la BDD et sa table
            this.dbHelper = new contactDBOpenHelper(context, NOM_BD, null, VERSION_BD);
        }
       
        public void close(){
            maBaseDonnees.close();
        }

        public  void open() throws SQLiteException {
            try{
                maBaseDonnees = dbHelper.getWritableDatabase();
            } catch (SQLiteException ex) {
                maBaseDonnees = dbHelper.getReadableDatabase();
            }
        }
       
        // Insertion d'un contact
        public long insertContact(Contact contact){
            //Création d'un ContentValues (fonctionne comme une HashMap)
            ContentValues valeurs = new ContentValues();
                   
            //on lui ajoute une valeur associée à une clé (qui est le nom de la colonne dans laquelle on veut mettre la valeur)
            valeurs.put(COL_NOM, contact.getNom());
            valeurs.put(COL_NUM_TEL, contact.getNumTelephone());
                   
            //on insère l'objet dans la BDD via le ContentValues
            return maBaseDonnees.insert(TABLE_CONTACT, null, valeurs);
        }
               
        // Mise à jour d'un contact
        public int miseAjourContact(int id, Contact contact){
            ContentValues valeurs = new ContentValues();
            valeurs.put(COL_NOM, contact.getNom());
            valeurs.put(COL_NUM_TEL, contact.getNumTelephone());
            return maBaseDonnees.update(TABLE_CONTACT, valeurs, COL_ID + "=" + id, null);
        }
               
        // Suppression d'un contact
        public int supprimeContact(int id){
            return maBaseDonnees.delete(TABLE_CONTACT, COL_ID + "=" + id, null);
        }       
       

        public SQLiteDatabase getMaBaseDonnees() {
            return maBaseDonnees;
        }
         
       
        // contenu dans la BDD (ici on sélectionne le livre grâce à son nom)  ** String nom **  COL_NOM + " LIKE " + nom,
       
        // Récupération de tous les concacts
        public Cursor getAllContactCursor(){
            return  maBaseDonnees.query(TABLE_CONTACT, new String[] { COL_ID,COL_NOM, COL_NUM_TEL},null, null, null, null, null);
        }
       
        //Récupère dans un Curseur les valeurs correspondantes à un contact
        public Cursor getContactCursor(String nom) throws SQLException{
            Cursor resultat = maBaseDonnees.query(true, TABLE_CONTACT, new String[] {COL_ID, COL_NOM, COL_NUM_TEL}, COL_NOM + "=" + nom,
                    null, null, null, null, null);
           
            if ((resultat.getCount()==0)|| !resultat.moveToFirst()){
                throw new SQLException("Aucun contact pour le nom : " + nom);
            }
            return resultat;
        }
       
        // Recupération d'un contact fortement typé
        public Contact getContact(String nom) throws SQLException{
            Cursor cursor = maBaseDonnees.query(true, TABLE_CONTACT, new String[] {COL_ID, COL_NOM, COL_NUM_TEL}, COL_NOM + "=" + nom,
                    null, null, null, null, null);
           
            if ((cursor.getCount()==0)|| !cursor.moveToFirst()){
                throw new SQLException("Aucun contact pour le nom : " + nom);
            }
           
            String mNom = cursor.getString(NUM_COL_NOM);
            String mNumTel = cursor.getString(NUM_COL_NumTel);
           
            Contact contact = new Contact(mNom, mNumTel);
           
            return contact;
           
        }
           
}


Classe de l'Activité

package com.aris.tp_sqlite;

import java.util.ArrayList;

import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;

public class MainActivity extends Activity {
   
    ContactBD contactBD;
    private ListView myListView;
    private EditText myEditText;
    private EditText myEditTextPhone;
    private Button myButton;
    private ArrayList<Contact> contactItems;
    private ArrayAdapter<Contact> aa;
   
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
       
        myListView = (ListView)findViewById(R.id.myListView);
        myEditText = (EditText)findViewById(R.id.edtNom);
        myEditTextPhone = (EditText) findViewById(R.id.edtNumTel);
        myButton =(Button)findViewById(R.id.bouton);
       
        contactItems = new ArrayList<Contact>();
        int resID = R.layout.activity_main;
        aa = new ArrayAdapter<Contact>(this, resID, contactItems);
        myListView.setAdapter(aa);
       
        myButton.setOnClickListener(new OnClickListener() {
           
            @Override
            public void onClick(View v) {
                Contact newContact;
                newContact = new Contact(myEditText.getText().toString(), myEditTextPhone.getText().toString());
                contactBD.insertContact(newContact);
                updateArray();
                myEditText.setText("");
                myEditTextPhone.setText("");
                aa.notifyDataSetChanged();   
            }
        });
        registerForContextMenu(myListView);


        //Création d'une instance de ma classe ContactBD
        contactBD = new ContactBD(this);
    
        // On ouvre ou on créer la base de données pour écrire dedans
        contactBD.open();
     

        remplirContactListe();
    }
   
    Cursor contactListCursor;
   
    @SuppressWarnings("deprecation")
    private void remplirContactListe(){
        // Récupère tous les contacts de la base de données
        contactListCursor = contactBD.getAllContactCursor();
        startManagingCursor(contactListCursor);
       
        // Mise à jour du tableau
        updateArray();
    }
   
    private void updateArray(){
        contactListCursor.requery();
       
        contactItems.clear();
       
        if (contactListCursor.moveToFirst())
            do{
                String nom = contactListCursor.getString(contactBD.NUM_COL_NOM);
                String numTel = contactListCursor.getString(contactBD.NUM_COL_NumTel);
               
                Contact newContact = new Contact(nom, numTel);
                contactItems.add(0, newContact);
            }while(contactListCursor.moveToNext());
           
        aa.notifyDataSetChanged();
    }
   
   
    private void supprimerElement(int index){
        contactBD.supprimeContact(contactItems.size()-index);
        updateArray();
    }
   
    @Override
    protected void onDestroy() {
        // On ferme la base de données
        contactBD.close();
        super.onDestroy();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

   
}


Le layout

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:id="@+id/layout1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        >
       
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/nom"
        />
       
    <EditText
        android:id="@+id/edtNom"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="text"
    />
   
   
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/numTel"
        />
   
    <EditText
        android:id="@+id/edtNumTel"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="text"
    />
   
    </LinearLayout>
    <Button
        android:id="@+id/bouton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/ajouter"/>
    <ListView
        android:id="@+id/myListView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
    />
     
       

</LinearLayout>



Dieudonné NIEME

unread,
May 25, 2015, 7:14:40 AM5/25/15
to congo-androi...@googlegroups.com

Bonjour,

Je te propose de suivre le tutoriel en piece jointe (la première partie avec l'utilisation du pattern DAO), la seconde partie fais recourt au content provider, pour un début arrête toi à la première partie.

Sincère salutations
larsvogel-sqlite-database-android.pdf

Aristos Mouko

unread,
May 25, 2015, 9:56:55 AM5/25/15
to congo-androi...@googlegroups.com

C'est un post qui date, il ya deux ans jour pour jour je n'ai plus de souci avec SQLite. Et je préfère travailler avec les web services RESTFul (stockage externe)

Merci quand même pour la réponse ça pourra profiter à ceux qui sont en difficultés pour mettre en place une bdd sqlite sous Android.

--
Vous recevez ce message, car vous êtes abonné à un sujet dans le groupe Google Groupes "Congo Android Developers".
Pour vous désabonner de ce sujet, visitez le site https://groups.google.com/d/topic/congo-android-developers/ImTIQupDTrA/unsubscribe.
Pour vous désabonner de ce groupe et de tous ses sujets, envoyez un e-mail à l'adresse congo-android-deve...@googlegroups.com.
Pour envoyer un message à ce groupe, envoyez un e-mail à l'adresse congo-androi...@googlegroups.com.
Pour obtenir davantage d'options, consultez la page https://groups.google.com/d/optout.

Dieudonné NIEME

unread,
May 27, 2015, 5:19:38 AM5/27/15
to congo-androi...@googlegroups.com
@Aristide,
Stockage interne implique une application online sauf si je me trompe, en tous cas pour ma part, stockage externe et base de données sqlite pour la synchro question de travailler offline.

Peace
--

Dieudonné NIEME | Ingénieur en réseaux et télécoms
Mobile   : +242 06 691 02 73
Bureau  : +242 05 515 24 70




Reply all
Reply to author
Forward
0 new messages