使用ContentValues和update-method更新sql数据库

时间:2010-09-21 13:30:58

标签: android database sqlite

我想用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语句。我使用插入方法几乎一样,并且工作得非常好。

许多人, 弗洛里安

4 个答案:

答案 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;
}