【问题标题】:Strange Problem with Cursor - Android光标的奇怪问题 - Android
【发布时间】:2011-10-02 13:45:49
【问题描述】:

这是我的数据库类中的一个方法:

public Cursor fetchFavTitles() {
    return myDataBase.rawQuery("SELECT rowid as _id, title
        FROM table1 JOIN table2 JOIN table3 JOIN table4 JOIN table5 JOIN table6
        WHERE fav = TRUE", null);
}

我的 SQLite 数据库有 6 个表:

  1. table1 => rowid、标题、内容、收藏夹
  2. table2 => rowid、标题、内容、收藏
  3. table3 => rowid、标题、内容、收藏
  4. table4 => rowid、标题、内容、收藏夹
  5. table5 => rowid、标题、内容、收藏夹
  6. table6 => rowid、标题、收藏夹

在我的活动中,我写了这个:

Cursor cursor = myDbHelper.fetchFavTitles();

应用程序强制关闭!

知道我在哪里弄错了吗?

更新

这是 LogCat 的快照,我看不懂,我用android.database 过滤了输出:

我要做的是从所有表中获取具有值 TRUE 的 fav(类型:BOOL)的 title(类型:TEXT)并将它们显示在一个 ListView(使用 SimpleCursorAdapter)中。

【问题讨论】:

  • 对于那些想知道的人,我需要有不同的表,即使它们具有相同的属性。所以,merging the database tables 不是一个选项 :)
  • LogCat 说什么是导致应用关闭的异常?
  • 我更新了,请看看
  • 你能解释更多@dziobas 吗?

标签: android sqlite android-cursor


【解决方案1】:

在不完全了解您的目的的情况下,我猜您需要将查询更改为:

SELECT rowid as _id, title
        FROM table1 
        WHERE fav = TRUE
UNION ALL
SELECT rowid as _id, title
        FROM table2
        WHERE fav = TRUE
UNION ALL
SELECT rowid as _id, title
        FROM table3
        WHERE fav = TRUE
UNION ALL   
SELECT rowid as _id, title
        FROM table4 
        WHERE fav = TRUE
UNION ALL       
SELECT rowid as _id, title
        FROM table5 
        WHERE fav = TRUE
UNION ALL       
SELECT rowid as _id, title
        FROM table6 
        WHERE fav = TRUE

这将从每个表中获取“fav = TRUE”的所有结果,并将它们全部放入一个结果集中。如果您不想重复,可以将“UNION ALL”更改为“UNION”。现在您的查询失败了,因为 'SELECT rowid as _id, title' 不知道要从哪个表中提取 'title' 字段。

【讨论】:

  • 虽然这似乎是解决方案,但它没有奏效! LogCat 说:there is no such column fav。如果我从查询中删除 WHERE 子句,一切正常。仅供参考,我在从 XML 文件(使用 SQLite Manager FF 附加组件)导入它们后将 fav 列添加到表中。这有什么不同吗?
  • 我解决了:-D。这就像你的代码。您只需将fav 属性添加到SELECT 语句。不要问我为什么!谢啦。非常感谢您的帮助:)
猜你喜欢
  • 1970-01-01
  • 2019-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多