2016-10-27 43 views
0

我有一个BookMarked列的电影sqlite数据库,其中值1表示电影已被标记为书签,而0表示它没有。所有的默认值是0无法有选择地更新列值

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

我已经创建了一个方法基于相应ID值来更新个人BookMarked列值

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

} 

因此,例如,书签(1)应该改变上表中

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

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

我可以改变线

db.update( “电影”,newValues,strFilter的,NULL);

此通过去除过滤器并设置参数为空

db.update( “电影”,newValues,NULL,NULL);

,我得到这个,当我打电话书签()

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

     } 
+0

显然,你的'ID'值不存在。 –

回答

0

如果您尝试更新数据库,你需要

SQLiteDatabase db = getWritableDatabase(); 

,所以你可以改变它。

那么update应该

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

我仍然有同样的问题。这行'db.update(“Movies”,newValues,null,null);'更新所有值,并且这一行'db.update(“Movies”,newValues,strFilter,null);'更新NO值 –