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):
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 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 + "))";
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
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; } }
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:
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(); } }
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![]()
Partager