je voudrais mettre à jour ma base de données sql lite avec la méthode native update-de la classe SQLiteDatabase d'Android.
ContentValues dataToInsert = new ContentValues();
dataToInsert.put("name", "flo");
dataToInsert.put("location", "flotown");
String where = "id" + "=" + id;
try{
db.update(DATABASE_TABLE, dataToInsert, where, null);
}
catch (Exception e){
String error = e.getMessage().toString();
}
mais j'obtiens l'erreur suivante: Android.database.sqlite.SQLiteException: près de "15": erreur de syntaxe:, lors de la compilation: UPDATE mytable SET location =?, name =? O id = 2010-09-21 15: 05: 36.995
Je ne sais pas quel devrait être le problème. D'une manière ou d'une autre, les valeurs n'arrivent pas dans l'instruction SQL. J'ai presque fait de même avec la méthode de l'insertion et cela a fonctionné assez bien.
beaucoup thx, florian
Vous utilisez la fonction de mise à jour mal. Cela devrait être comme ça:
String where = "id=?";
String[] whereArgs = new String[] {String.valueOf(id)};
db.update(DATABASE_TABLE, dataToInsert, where, whereArgs);
Les chaînes du tableau whereArgs sont substituées à chaque "?" dans la variable where.
c'est à dire. si vous aviez where = "name =? AND type =? alors le premier '?' serait remplacé par whereArgs [0] et le second par whereArgs [1].
En fait, il vous suffit d’ajouter des apostrophes à votre clause where. Donc ça devrait être:
String where = "id='" + id + "'"
(remarque: toutefois, ce n'est pas la meilleure pratique, car il est théoriquement ouvert aux attaques par injection)
J'ai une autre approche
public boolean updateEmployee(TalebeDataUser fav) {
SQLiteDatabase database = dbHelper.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(DBHelper.COLUMN_ID, fav.getId());
contentValues.put(DBHelper.COLUM_AD, fav.getAd());
contentValues.put(DBHelper.COLUMN_NUMARA, fav.getNumara());
contentValues.put(DBHelper.COLUMN_YURD_ID, fav.getYurtID());
contentValues.put(DBHelper.COLUMN_EGITIM_ID, fav.getEgitimTur());
contentValues.put(DBHelper.COLUMN_TEL, fav.getTel());
contentValues.put(DBHelper.COLUMN_EMAIL, fav.getEmail());
contentValues.put(DBHelper.COLUMN_ADDRESS, fav.getAdres());
String whereClause = DBHelper.COLUM_AD + " = ? AND " + DBHelper.COLUMN_NUMARA + " = ? ";
final String whereArgs[] = {fav.getAd(), String.valueOf(fav.getNumara())};// old nameler taranıyor
int affectedRows = database.update(DBHelper.TABLE_NAME_OGR, contentValues, whereClause, whereArgs);
return affectedRows > 0;
}
En fait, ce que vous avez écrit est exact. La syntaxe est correcte . Mais vous devez les vérifier. String où = "id" + "=" + id; Dans la déclaration ci-dessus, "id" doit être un numéro de type et id doit être int . Si id est un type de texte, suivez @Adam javin answer .