web-dev-qa-db-de.com

aktualisieren Sie die SQL-Datenbank mit ContentValues ​​und der Update-Methode

ich möchte meine SQL Lite-Datenbank mit der nativen Update-Methode der SQLiteDatabase-Klasse von Android aktualisieren.

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();
}

ich erhalte jedoch folgende Fehlermeldung: Android.database.sqlite.SQLiteException: in der Nähe von "15": Syntaxfehler: Beim Kompilieren: UPDATE mytable SET location = ?, name =? WHERE id = 2010-09-21 15: 05: 36.995

Ich weiß nicht, was das Problem sein sollte. Irgendwie kommen die Werte nicht in der SQL-Anweisung an. Ich habe mit der Insert-Methode fast das gleiche gemacht und das hat ganz gut funktioniert.

viele thx, florian

21
spierala

Sie verwenden die Update-Funktion falsch. Es sollte so sein:

String where = "id=?";
String[] whereArgs = new String[] {String.valueOf(id)};

db.update(DATABASE_TABLE, dataToInsert, where, whereArgs);

Die Strings im whereArgs-Array werden für jedes '?' in der wo Variable. 

dh. wenn Sie wo = "name =? AND type =? dann das erste"? " würde durch whereArgs [0] und die Sekunde durch whereArgs [1] ersetzt.

48
TheContstruct

Tatsächlich müssen Sie Ihrer where-Klausel nur Apostrophe hinzufügen. Es sollte also sein:

String where = "id='" + id + "'"

(Hinweis: Dies ist jedoch keine bewährte Methode, da theoretisch Injektionsangriffe offen bleiben.)

4
Adam Javin

Ich habe einen anderen Ansatz

    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

Eigentlich ist genau das, was du geschrieben hast, richtig. Die Syntax ist korrekt .. __ Sie müssen diese jedoch überprüfen. Zeichenfolge where = "id" + "=" + id; In der obigen Deklaration sollte "id" Typennummer sein und id sollte int ..__ sein. Wenn id ein TEXT-Typ ist, dann @Adam javin answer .

0
Anuroop Pendela