【发布时间】:2014-05-20 14:48:38
【问题描述】:
我正在构建一个使用 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 管理器中打开数据库文件并运行完全相同的查询,我会得到结果。
我知道我可以修改查询以在原始 list 和 item 表之间建立连接,但我发现这样效率较低。
任何想法都将不胜感激,因为我已经在这方面花费了太多时间。
编辑我知道join 是什么,我说的是如果我这样做而不是使用整个list 表,效率会高得多。
我忘记了一个很重要的方面
WHERE 子句看起来像
" WHERE list.state = 'sold' and list.name like '" + arg + "%'"
arg 是一个字符串。
【问题讨论】:
-
其实使用join会更高效
-
您已经在使用连接。根据 SQLite,此上下文中的逗号 (
,) 实际上是一个连接运算符。你也可以明确加入。 -
将您的代码发布到您创建和传递查询的位置
标签: android sqlite android-sqlite