我正在构建一个使用SQLite数据库的Android应用。 对于这一项任务,我必须运行如下所示的查询:
SELECT item.id, item.price, t1.quantity
FROM item, (SELECT id, price
FROM list
WHERE list.state = 'sold') t1
WHERE item.id = t1.id
到目前为止,我已经尝试过:
Cursor c = resolver.query(uriRawQuery, null, selection, null, null)
其中uriRawQuery
用于告诉ContentProvider
它应该执行db.rawQuery(selection, null)
而selection
是一个类似于上述查询的字符串。
问题是没有数据返回Cursor
。当我致电c.moveToFirst()
时,我会false
。
奇怪的是,如果我在SQLite Manager中打开数据库文件并运行完全相同的查询,我会得到结果。
我知道我可以修改查询以在原始list
和item
表之间建立联接,但我发现它的效率不高。
任何想法都会非常感激,因为我已经花费了太多时间。
的修改我知道join
是什么,我说的是,如果我这样做而不是使用整个list
表,效率要高得多。
我忘记了一个非常重要的方面
WHERE
子句看起来像
" WHERE list.state = 'sold' and list.name like '" + arg + "%'"
其中arg
是一个字符串。
答案 0 :(得分:0)
我设法解决了这个问题,我仍然不知道为什么会这样,但至少我让Cursor
实际选择了行。
经过多次试验后,我考虑放弃上面的语法并写下来:
" WHERE list.state = 'sold' and list.name like ? "
并在
中移动参数selectionArgs = new String[]{arg + "%"}
我会在接受答案之前等待一段时间,以防有人提供解释为什么即使两个查询看起来完全一样,也会得到不同的结果。