【问题标题】:android: SQLite query returns no resultsandroid:SQLite 查询不返回结果
【发布时间】: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 管理器中打开数据库文件并运行完全相同的查询,我会得到结果。

我知道我可以修改查询以在原始 listitem 表之间建立连接,但我发现这样效率较低。

任何想法都将不胜感激,因为我已经在这方面花费了太多时间。

编辑

我知道join 是什么,我说的是如果我这样做而不是使用整个list 表,效率会高得多。

我忘记了一个很重要的方面 WHERE 子句看起来像

" WHERE list.state = 'sold' and list.name like '" + arg + "%'"

arg 是一个字符串。

【问题讨论】:

  • 其实使用join会更高效
  • 您已经在使用连接。根据 SQLite,此上下文中的逗号 (,) 实际上是一个连接运算符。你也可以明确加入。
  • 将您的代码发布到您创建和传递查询的位置

标签: android sqlite android-sqlite


【解决方案1】:

我设法解决了这个问题,我仍然不知道为什么会这样,但至少我得到了Cursor 来实际选择行。

经过多次尝试,我想放弃上面的语法,改写这个:

" WHERE list.state = 'sold' and list.name like ? "

并将参数移入

selectionArgs = new String[]{arg + "%"}

我将在接受答案之前等待一段时间,以防有人解释为什么即使两个查询看起来完全相同但得到不同的结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-31
    • 2019-09-18
    • 2012-05-08
    • 2016-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多