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 :

insertion dans la base de donnée


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Maroc

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mai 2014
    Messages : 43
    Par défaut insertion dans la base de donnée
    Salut les informaticiens, je veux insérer une colonne dans ma base SQLite, sachant que j'ais deux table ( TABLE_PROJET) composite d'un autre table ( TABLE_NOTE):

    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
     
     
        private static final String TABLE_PROJET = "table_projet";
        private static final String COL_IDPROJET = "IDP";
        private static final String COL_NOM_PROJET = "nom_projet";
        private static final String COL_DATED_PROJET = "dated";
        private static final String COL_DATEF_PROJET = "datef";
     
     
     
     
        private static final String CREATE_PROJET = "CREATE TABLE " + TABLE_PROJET + "("
                + COL_IDPROJET + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COL_NOM_PROJET + " TEXT NOT NULL, "
                + COL_DATED_PROJET + " INTEGER NOT NULL, " + COL_DATEF_PROJET + " INTEGER NOT NULL );";
     
                              **********************NOTE********************
     
        private static final String TABLE_NOTE = "table_note";
        private static final String COL_ID = "IDN";
        private static final String COL_TITRE_NOTE = "titre_note";
        private static final String COL_DATE_NOTE ="date";
        private static final String COL_VERSION_NOTE = "version_n";
        private static final String COL_TEXT = "text_note";
        private static final String COL_IDPROJET_NOTE = "idp_note";
     
     
     
     
        private static final String CREATE_NOTE = "CREATE TABLE " + TABLE_NOTE + " ("
                + COL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COL_TITRE_NOTE + " TEXT NOT NULL, "
                + COL_DATE_NOTE + " INTEGER NOT NULL, " + COL_TEXT + " TEXT NOT NULL, "
                +  COL_VERSION_NOTE + " INTEGER NOT NULL, " +  COL_IDPROJET_NOTE + " INTEGER NOT NULL, FOREIGN KEY(" + COL_IDPROJET_NOTE +
                  ") REFERENCES "  + TABLE_PROJET + "(" + COL_IDPROJET + "))";
    Ma classe qui gère 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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    public class NoteDB {
     
        private static final int VERSION_BDD = 3;
        private static final String NOM_BDD = "notes.db";
     
        private static final String TABLE_NOTE = "table_note";
        private static final String COL_ID = "IDN";
        private static final int NUM_COL_ID =0;
        private static final String COL_DATE_NOTE = "date";
        private static final int NUM_COL_DATE =1;
        private static final String COL_TITRE_NOTE = "titre_note";
        private static final int NUM_COL_TITRE =2;
        private static final String COL_TEXT = "text_note";
        private static final int NUM_COL_TEXT =3;
        private static final String COL_VERSION_NOTE= "version_n";
        private static final int NUM_COL_VERSION =4;
     
        private SQLiteDatabase bdd;
     
        private DataBaseClasse maBaseNote;
     
        public NoteDB(Context context){
            //On crée la BDD et sa table
            maBaseNote = new DataBaseClasse(context, NOM_BDD, null, VERSION_BDD);
        }
     
        public void open(){
            //on ouvre la BDD en écriture
            bdd = maBaseNote.getWritableDatabase();
        }
     
        public void close(){
            //on ferme l'accès à la BDD
            bdd.close();
        }
     
        public SQLiteDatabase getBDD(){
            return bdd;
        }
     
        public long insertnote( Note note){
            //Création d'un ContentValues (fonctionne comme une HashMap)
            ContentValues values = 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)
     
            values.put(COL_TITRE_NOTE, Note.getTitre());
            values.put(COL_DATE_NOTE,Note.getDateC());
            values.put(COL_VERSION_NOTE, Note.getVersionN());
            values.put(COL_TEXT, Note.getText());
     
            //on insère l'objet dans la BDD via le ContentValues
            return bdd.insert(TABLE_NOTE, null, values);
        }
     
        public int updatenote(String titre, Note note){
            //La mise à jour d'une note dans la BDD fonctionne plus ou moins comme une insertion
            //il faut simplement préciser quel note on doit mettre à jour grâce à l'ID
            ContentValues values = new ContentValues();
            values.put(COL_TITRE_NOTE, Note.getTitre());
            values.put(COL_DATE_NOTE,Note.getDateC());
            values.put(COL_VERSION_NOTE, Note.getVersionN());
            values.put(COL_TEXT, Note.getText());
            return bdd.update(TABLE_NOTE, values, COL_TITRE_NOTE + " = " +titre, null);
        }
     
        public int removeNoteWithName(String titre){
            //Suppression d'un livre de la BDD grâce à l'ID
            return bdd.delete(TABLE_NOTE, COL_TITRE_NOTE + " = " +titre, null);
        }
     
        public Note getNoteWithVersion(String version){
            //Récupère dans un Cursor les valeurs correspondant à une note contenu dans la BDD (ici on sélectionne la note grâce à son titre)
            Cursor c = bdd.query(TABLE_NOTE, new String[] {COL_ID, COL_DATE_NOTE, COL_TITRE_NOTE, COL_TEXT, COL_VERSION_NOTE}, COL_VERSION_NOTE + " LIKE \"" + version +"\"", null, null, null, null,null);
            return cursorToLivre(c);
        }
        public Note getNoteWithTitre(String titre){
            //Récupère dans un Cursor les valeurs correspondant à une note contenu dans la BDD (ici on sélectionne la note grâce à son titre)
            Cursor c = bdd.query(TABLE_NOTE, new String[] {COL_ID, COL_DATE_NOTE, COL_TITRE_NOTE, COL_TEXT, COL_VERSION_NOTE}, COL_TITRE_NOTE + " LIKE \"" + titre +"\"", null, null, null, null,null);
            return cursorToLivre(c);
        }
        public Note getNoteWithDate(int date){
            //Récupère dans un Cursor les valeurs correspondant à une note contenu dans la BDD (ici on sélectionne la note grâce à son titre)
            Cursor c = bdd.query(TABLE_NOTE, new String[] {COL_ID, COL_DATE_NOTE, COL_TITRE_NOTE, COL_TEXT, COL_VERSION_NOTE}, COL_DATE_NOTE + " LIKE \"" + date +"\"", null, null, null, null,null);
            return cursorToLivre(c);
        }
     
        //Cette méthode permet de convertir un cursor en un livre
        private Note cursorToLivre(Cursor c){
            //si aucun élément n'a été retourné dans la requête, on renvoie null
            if (c.getCount() == 0)
                return null;
     
            //Sinon on se place sur le premier élément
            c.moveToFirst();
            //On créé un livre
            Note note = new Note();
            //on lui affecte toutes les infos grâce aux infos contenues dans le Cursor
     
            Note.setTitre(c.getString(NUM_COL_TITRE));
            Note.setDateC(c.getInt(NUM_COL_DATE));
            Note.setText(c.getString(NUM_COL_TEXT));
            Note.setVersionN(c.getInt(NUM_COL_VERSION));
            //On ferme le cursor
            c.close();
     
            //On retourne le livre
            return note;
        }
    }
    MainActivity :

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    public class MainActivity extends Activity {
        private static final String LOG_TAG = "success";
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            //Création d'une instance de ma classe NoteDB
            NoteDB maNoteDB = new NoteDB(this);
     
     
            //Création d'une note
     
            Note note = new Note("titre", 2015 ,2, "Programmez pour Android");
     
            //On ouvre la base de données pour écrire dedans
     
            maNoteDB.open();
            //On insère la note que l'on vient de créer
     
            maNoteDB.insertnote(note);
            String log= "success";
            Log.d(LOG_TAG,log);
     
            //Pour vérifier que l'on a bien créé notre note dans la BDD
            //on extrait la note  de la BDD grâce au titre du livre que l'on a créé précédemment
            Note NoteFromBdd =  maNoteDB.getNoteWithTitre(note.getTitre());
            //Si une note est retourné (donc si la note  à bien été ajouté à la BDD)
            if(NoteFromBdd != null){
                //On affiche les infos du note dans un Toast
                Toast.makeText(this, NoteFromBdd.toString(), Toast.LENGTH_LONG).show();
                //On modifie le titre du note
                NoteFromBdd.setTitre("J'ai modifié le titre du livre");
                //Puis on met à jour la BDD
                maNoteDB.updatenote(NoteFromBdd.getTitre(), NoteFromBdd);
            }
     
            //On extrait la note de la BDD grâce au nouveau titre
            NoteFromBdd = maNoteDB.getNoteWithTitre("J'ai modifié le titre du livre");
            //S'il existe une note possédant ce titre dans la BDD
            if(NoteFromBdd != null){
                //On affiche les nouvelles informations du note  pour vérifier que le titre du livre a bien été mis à jour
                Toast.makeText(this, NoteFromBdd.toString(), Toast.LENGTH_LONG).show();
                //on supprime la note de la BDD grâce à son ID
                maNoteDB.removeNoteWithName(NoteFromBdd.getTitre());
            }
     
            //On essaye d'extraire de nouveau la note de la BDD toujours grâce à son nouveau titre
            NoteFromBdd = maNoteDB.getNoteWithTitre("J'ai modifié le titre du livre");
            //Si aucun livre n'est retourné
            if(NoteFromBdd == null){
                //On affiche un message indiquant que la note n'existe pas dans la BDD
                Toast.makeText(this, "Ce livre n'existe pas dans la BDD", Toast.LENGTH_LONG).show();
            }
            //Si la note  existe (mais normalement il ne devrait pas)
            else{
                //on affiche un message indiquant que la note existe dans la BDD
                Toast.makeText(this, "Ce livre existe dans la BDD", Toast.LENGTH_LONG).show();
            }
     
            maNoteDB.close();
     
        }
        }
    quand j’exécute le programme l'insertion ne se faisait pas et l’émulateur m'affichait : Ce livre n'existe pas dans la BDD, avec un message d'erreur dans le logcat:

    Error inserting text_note=Programmez pour Android date=2015 version_n=2 titre_note=titre
    android.database.sqlite.SQLiteConstraintException: error code 19: constraint failed

    Merci de m'indiquer ou j'ai l'erreur SVP

  2. #2
    Expert confirmé

    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
    Billets dans le blog
    3
    Par défaut
    La table "note" ("table_note") a une foreign key ("idp_note") sur la table "projet" ("table_projet", colonne "idp")

    Hors, quand on insert une note, à aucun moment on ne spécifie le projet... => rejection par la base due à une contrainte (en l'occurence la foreign key qui ne correspond à rien).

Discussions similaires

  1. Parcours d'un fichier et insertion dans une base de données !
    Par condor_01 dans le forum Général Java
    Réponses: 2
    Dernier message: 24/04/2008, 09h24
  2. [paradox7] Problème d'insertion dans la base de données
    Par mouna201 dans le forum Bases de données
    Réponses: 4
    Dernier message: 01/02/2006, 09h47
  3. problème d'insertion dans une base de données
    Par belmansour tidjani dans le forum JDBC
    Réponses: 7
    Dernier message: 18/01/2006, 22h13
  4. [Hibernate] problème d'insertion dans la base de données
    Par Willy7901 dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 18/08/2005, 13h19
  5. Probleme d'insertion dans la base de données
    Par PrinceMaster77 dans le forum ASP
    Réponses: 5
    Dernier message: 11/06/2004, 16h21

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