159 votes

SQLite dans Android Comment mettre à jour une ligne spécifique

J'ai essayé de mettre à jour une ligne spécifique depuis un certain temps maintenant, et il semble qu'il y ait deux façons de le faire. D'après ce que j'ai lu et essayé, vous pouvez simplement utiliser la :

execSQL(String sql) méthode

ou bien la :

update(String table, ContentValues values, String whereClause, String[] whereArgs) méthode.

(Dites-moi si c'est incorrect car je suis nouveau sur Android et très nouveau en SQL.)

Alors passons à mon code réel.

myDB.update(NomTable, "(Champ1, Champ2, Champ3)" + " VALUES ('Bob', 19, 'Mâle')", "where _id = 1", null);

J'essaie d'accomplir ceci :

Mettre à jour Champ1, Champ2 et Champ3 où la clé primaire (_id) est égale à 1.

Eclipse me donne une ligne rouge juste en dessous du mot "update" et me donne cette explication :

La méthode update(String, ContentValues, String, String[]) dans le type SQLiteDatabase n'est pas applicable pour les arguments (String, String, String, null)

Je suppose que je n'attribue pas correctement les ContentValues. Est-ce que quelqu'un peut me mettre sur la bonne voie ?

324voto

Akhil Points 5374

Tout d'abord, créez un objet ContentValues :

ContentValues cv = new ContentValues();
cv.put("Field1","Bob"); // Ces champs doivent correspondre à vos valeurs de chaîne réelles des noms de colonne
cv.put("Field2","19");
cv.put("Field2","Male");

Ensuite, utilisez la méthode update, cela devrait fonctionner maintenant :

myDB.update(NomTable, cv, "_id = ?", new String[]{id});

0 votes

Eclipse me donne des soulignements rouges sur "Champ1", "Champ2" et "Champ3". Des suggestions ?

1 votes

Désolé, je pensais qu'ils sont des variables déclarées dans votre code. Mettez-les entre guillemets.

0 votes

Merci d'être la première personne à avoir donné la bonne réponse. Cela m'a fait gagner beaucoup de temps. Très apprécié.

55voto

Yaqub Ahmad Points 10931

Manière simple :

String strSQL = "UPDATE myTable SET Column1 = someValue WHERE columnId = "+ someValue;

myDataBase.execSQL(strSQL);

7 votes

Ce code lancera une IllegalArgumentException. Si vous exécutez la requête sans ContentValues, il vaudrait mieux éviter d'utiliser le deuxième argument du tout. Comme : myDataBase.execSQL(strSQL);

0 votes

Utiliser execSQL() pour les mises à jour ne fonctionnera pas. Lire execSQL() avec UPDATE ne met pas à jour.

0 votes

Il y a un risque sérieux en matière de sécurité à faire cela car quelqu'un pourrait transmettre une instruction SQL à la variable 'someValue', ce qui pourrait altérer toute la base de données. Par conséquent, essayez toujours d'utiliser des instructions préparées lors de toute opération sur la base de données.

27voto

KarlKarlsom Points 2970
  1. Je préfère personnellement .update pour sa commodité. Mais execsql fonctionnera de la même manière.
  2. Vous avez raison avec votre supposition que le problème réside dans vos valeurs de contenu. Vous devriez créer un objet ContentValue et y mettre les valeurs de votre ligne de base de données.

Ce code devrait corriger votre exemple :

 ContentValues data=new ContentValues();
 data.put("Field1","bob");
 data.put("Field2",19);
 data.put("Field3","male");
 DB.update(Tablename, data, "_id=" + id, null);

7voto

Android Points 817

Vous essayez cette méthode de mise à jour dans SQLite

int id;
ContentValues con = new ContentValues();
con.put(TITLE, title);
con.put(AREA, area);
con.put(DESCR, desc);
con.put(TAG, tag);
myDataBase.update(TABLE, con, KEY_ID + "=" + id,null);

2voto

mcxiaoke Points 98

Si votre ligne sqlite a un identifiant unique ou autre équivalent, vous pouvez utiliser la clause where, comme ceci

mise à jour .... où id = {voici votre identifiant de ligne unique}

0 votes

Encore une fois, je reçois la même erreur que celle mentionnée dans ma question. J'ai bien modifié le troisième paramètre (String whereClause) en "where _id = 1". Ce changement est également reflété dans ma question.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X