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