我想用android的SQLiteDatabase类的原生更新方法更新我的sql lite数据库。
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();
}
但我收到以下错误: android.database.sqlite.SQLiteException:near“15”:语法错误:,同时编译:UPDATE mytable SET location = ?, name =? WHERE id = 2010-09-21 15:05:36.995
我不知道应该是什么问题。不知何故,值不会到达sql语句。我使用插入方法几乎一样,并且工作得非常好。
许多人, 弗洛里安答案 0 :(得分:48)
您使用的是更新功能错误。它应该是这样的:
String where = "id=?";
String[] whereArgs = new String[] {String.valueOf(id)};
db.update(DATABASE_TABLE, dataToInsert, where, whereArgs);
whereArgs数组中的字符串替换为每个'?'在where变量中。
即。如果你有where =“name =?AND type =?那么第一个'?'将由whereArgs [0]替换,第二个由whereArgs [1]替换。
答案 1 :(得分:4)
实际上,您只需要在where子句中添加撇号。所以它应该是:
String where = "id='" + id + "'"
(注意:然而,这不是最佳做法,因为它理论上会对注射攻击持开放态度)
答案 2 :(得分:0)
实际上你究竟写的是正确的。语法是正确的。 但你必须检查这些。 字符串=" id" +" =" + id; 在上面的声明" id"应该是类型号,id应该是int。 如果id是一种TEXT,那么请关注@Adam javin answer。
答案 3 :(得分:0)
我有另一种方法
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;
}