2010-09-21 12 views
19

Ich möchte meine SQL-Lite-Datenbank mit der nativen Update-Methode der SQLiteDatabase-Klasse von Android aktualisieren.Update SQL-Datenbank mit ContentValues ​​und die Update-Methode

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

aber ich bekomme 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 fast dasselbe mit der Einfügemethode gemacht und das hat ganz gut funktioniert.

viele thx, florian

+5

Ich weiß, das alte Post, aber Sie sollten nie Benutzer „id“ Verwendung „_id“ statt. "_id" ist eine allgemeine ID für Datenbanken in Android und empfohlen. – Jona

Antwort

45

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 in der WhereArgs-Array wird ersetzt in für jedes "?" in der Wo-Variable.

dh. wenn du wo = "name =? UND type =? dann hättest du das erste?" . Erhalten würde durch whereArgs [0] und die zweite von whereArgs [1]

+0

"Kann toString() auf dem primitiven Typ long nicht aufrufen" – Mirko

+1

@Mirko: Verwenden Sie 'Long.toString (id)' stattdessen! –

4

Sie brauchen nur Eigentlich ersetzt Apostroph Ihre where-Klausel hinzufügen, so sollte es sein.

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

(Anmerkung: dies ist jedoch nicht bewährt, da es theoretisch offen lässt zu Injection-Angriffe)

0

Eigentlich, was genau geschrieben Sie richtig ist. Die Syntax korrekt ist. Aber Sie müssen diese überprüfen. String where = „id“ + "=" + id; In der obigen Deklaration sollte "id" Typennummer und ID sollte int sein. Und wenn ID eine Art von TEXT ist, dann folgen Sie @Adam Javin Antwort.

0

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; 
} 
Verwandte Themen