无法有选择地更新列值

时间:2016-10-27 18:39:10

标签: android sqlite

我有一个带有BookMarked列的电影的sqlite数据库,其中值1表示电影已经过书籍标记,而0表示它没有。所有默认值均为0

ID| BookMarked
--+--------
1 | 0
2 | 0
3 | 1  <--- movie is BookMarked

我创建了一种方法,可根据相应的BookMarked值更新单个ID列值

public void bookMark(String ID){

    SQLiteDatabase db = getReadableDatabase();
    ContentValues newValues = new ContentValues();

    String value = "1";
    String strFilter = "ID="+ID;

    newValues.put("BookMarked", value);

    db.update("Movies", newValues, strFilter, null);

}

例如,bookMark(1)应该将上表更改为

ID| BookMarked
--+--------
1 | 1  <--- movie is BookMarked
2 | 0
3 | 1  <--- movie is BookMarked

问题是我无法选择性地更改BookMarked中的单个列值,尽管我的语法对我来说是正确的。

我可以改行

  

db.update(&#34; Movies&#34;,newValues,strFilter,null);

通过删除过滤器并将参数设置为null

来实现
  

db.update(&#34; Movies&#34;,newValues,null,null);

当我打电话给bookMark()

时,我得到了这个
ID| BookMarked
--+--------
1 | 1  
2 | 1
3 | 1  

为什么过滤器没有工作?

修改

我正在转移光标以测试代码

public void bookMark(String ID) {

        // Updating the column

        SQLiteDatabase db = getReadableDatabase();
        ContentValues newValues = new ContentValues();
        String value = "1";
        String strFilter = "ID="+ID;
        newValues.put("BookMarked", value);
        db.update("Movies", newValues, strFilter, null);


        // Dumping the cursor 

        SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
        qb.setTables("Movies");
        String[] sqlSelect = new String[]{"BookMarked"};
        String[] selectionArg = new String[]{value};
        Cursor c = qb.query(db, sqlSelect, "BookMarked=?", selectionArg, null, null, null);
        c.moveToFirst();
        Log.v("TAG","Dumping....");
        DatabaseUtils.dumpCursor(c);

        }

1 个答案:

答案 0 :(得分:0)

如果您尝试更新所需的数据库

SQLiteDatabase db = getWritableDatabase();

所以你可以改变它。

然后update应为

db.update("Movies", newValues, "ID=?", new String[] { ID });