web-dev-qa-db-fra.com

mettre à jour la base de données SQL avec ContentValues ​​et la méthode update

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

21
spierala

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].

48
TheContstruct

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)

4
Adam Javin

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;
}
0
Sam

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 .

0
Anuroop Pendela