IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Base de données


Sujet :

Android

  1. #1
    Membre actif
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 604
    Points : 206
    Points
    206
    Par défaut Base de données
    Bonjour,
    J'ai une base donnée et une listView ou sont affiché les élément de la base donnée. J'ai mis dans la base de données des éléments initiaux au début,
    mais quand je lance plusieurs fois mon application, les données initiaux sont ajouté alors qu'elle sont déjà contenu dans la base. Ce que je voudrais c'est que le programme ne duplique pas les données initiaux s'ils sont déjà contenu dans la base.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    public class MainActivity extends ListActivity  {
     
        ArrayList<Tache> liste_taches = new ArrayList<>();
        AdaptateurPerso adapter ;
        int p;
        Tache_BDD t_bdd ;
     
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
     
            setContentView(R.layout.activity_main);
     
            t_bdd = new Tache_BDD(this.getApplicationContext(),"Tache_BDD",null,1) ; // Création de la bas de donnée
     
            t_bdd.sauvegardeTache(new Tache("Cours de programmation",4));    //
            t_bdd.sauvegardeTache(new Tache("Entraînement de natation",3)); // Insertion des
            t_bdd.sauvegardeTache(new Tache("Faire une sieste",2));             // taches initiaux
            t_bdd.sauvegardeTache(new Tache("Prendre une douche",0));     //
            t_bdd.sauvegardeTache(new Tache("Ecouter des infos",1));        //
     
            liste_taches = t_bdd.getAllTache(); // Récupération de tous les éléments
            Log.d("TAG_CREATION"," "+ liste_taches);
            adapter = new AdaptateurPerso(this,liste_taches);
            setListAdapter(adapter);
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    public class Tache
    {
     
        String titre ;
        int priorite ;
        int imgPiorite;
     
        Long id;
     
     
     
        public Tache (String unTitre, int unePriorite)
        {
            this.titre = unTitre;
            this.priorite = unePriorite;
     
        }
     
    /*    public String getTitre() { return titre; }
        //public void setTitre(String titre) { this.titre = titre; }*/
     
        public int getPriorite() { return priorite; }
        //public void setPriorite(int priorite) { this.priorite = priorite; }*/
     
        public Long getId() { return id; }
        public void setId(Long id) { this.id = id; }
     
     
        @Override
        public String toString() {
            return "Tache{" +
                    "titre='" + titre + '\'' +
                    ", priorite=" + priorite +
                    ", id=" + id +
                    '}';
        }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
        public void sauvegardeTache(Tache t)
        {
            ContentValues cv = new ContentValues();
            cv.put(COL_TITRE,t.titre);
            cv.put(COL_PRIORITE,t.priorite);
     
            Long id = t.getId();
            if (id == null)
            {
                // Création
                id = this.getWritableDatabase().insert(TABLE_TACHE,null,cv);
                t.setId(id);
            }
     
            else
            {
                //Modification
                this.getWritableDatabase().update(
                        TABLE_TACHE,
                        cv,
                        COL_ID + " = ? ",
                        new String[] {String.valueOf(id)});
            }
     
        }

  2. #2
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Points : 2 808
    Points
    2 808
    Par défaut
    Pour cela, fais une requête avant insertion afin de voir si ton objet existe grace à son id.

  3. #3
    Membre actif
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 604
    Points : 206
    Points
    206
    Par défaut
    Bonjour,
    J'ai préféré faire une comparaison entre les noms des taches (comme ça je pourrais utilisé cette méthode dans le cas d'un ajout et voir s'il y a déjà cette tache dans la bas de donnée) mais cette méthode fait planté l'application.

    la base de donnée.class
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
        public boolean tacheEstContenu(String titre)
        {
            boolean estDejaContenu = false;
            Tache t = null ;
            Cursor c = this.getReadableDatabase().query(
                    TABLE_TACHE,
                    null,
                    COL_TITRE + " = ?",
                    new String[] {String.valueOf(titre)},
                    null, null, null, null);
     
            if (c.moveToFirst())
            {
                t = convert(c);
            }
     
            if (t.titre == titre)
            {
                estDejaContenu = true;
            }
     
            return estDejaContenu;
        }
    dans le Main_activity.class
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
                        Tache t = new Tache(data.getStringExtra("titre"), data.getIntExtra("priorite", 0));
                        if (t_bdd.tacheEstContenu(t.titre) == false)
                        {
                            t_bdd.sauvegardeTache(t);
                            liste_taches = t_bdd.getAllTache();
                            adapter = new AdaptateurPerso(this, liste_taches);
                            setListAdapter(adapter);
                        }

  4. #4
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Ne marchera pas... ce code vérifie que les deux référence sur les chaines sont les mêmes (le même objet string est référencé).
    La comparaison de chaines de caractères se fait avec .equals (ou .equalsIgnoreCase)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new String[] {String.valueOf(titre)},
    est un poil exagéré ... titre étant déjà de type String:
    marcherait très bien.

    La on ne demande aucune colonne à la query... ça risque de planter...(ne pas oublier le logcat en cas de plantage) d'autre part...
    Pour le test d'existance... un simple select count(*) devrait suffire....
    Ou simplement...

    select id from Tache where titre = ?

    et vérifier simplement qu'on a au moins un résultat ! dans le cursor...
    Mais plus important encore... *ne pas oublier de fermer le cursor !*

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    public boolean tacheEstContenu(String titre)
        {
            Cursor c = null;
            boolean estDejaContenu = false;
     
            try {
                 c = this.getReadableDatabase().query(
                    TABLE_TACHE,
                    new String[] { COL_ID },
                    COL_TITRE + " = ?",
                    new String[] {String.valueOf(titre)},
                    null, null, null, null);
     
                 estDejaContenu = c.moveToFirst();
            } finally {
                 if (c != null) c.close();
            }
     
            return estDejaContenu;
        }


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (t_bdd.tacheEstContenu(t.titre) == false)
    S'écrit simplement en Java:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (!t_bdd.tacheEstContenu(t.titre))
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  5. #5
    Membre actif
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 604
    Points : 206
    Points
    206
    Par défaut
    merci de votre aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème Base de données et CRecordSet
    Par LE CHAKAL dans le forum MFC
    Réponses: 3
    Dernier message: 20/08/2002, 11h59
  2. connexion base de donné
    Par saidi dans le forum MFC
    Réponses: 3
    Dernier message: 07/08/2002, 22h22
  3. [Concept] Stabilité d'une base de donnée
    Par lassmust dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 03/07/2002, 16h16
  4. Bases de données
    Par dev dans le forum C++Builder
    Réponses: 4
    Dernier message: 01/07/2002, 22h55
  5. associer une base de données(access) a un dbgrid
    Par ange1708 dans le forum MFC
    Réponses: 3
    Dernier message: 11/06/2002, 12h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo