我有一个带有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);
}
答案 0 :(得分:0)
如果您尝试更新所需的数据库
SQLiteDatabase db = getWritableDatabase();
所以你可以改变它。
然后update
应为
db.update("Movies", newValues, "ID=?", new String[] { ID });