2011-07-11 120 views
0

这是一种方法,在我的数据库类:与光标奇怪的问题 - 的Android

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. 表1 => rowid的,标题,内容,FAV
  2. table2 => rowid,title,content,fav
  3. table3 => rowid,title,content,fav
  4. table4 => rowid,title,content,fa v
  5. 表5-1 => ROWID,标题,内容,最爱
  6. 表6 => ROWID,标题,最爱

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

Cursor cursor = myDbHelper.fetchFavTitles(); 

和应用力关闭!

任何想法我错了吗?

UPDATE

这是logcat的快照,我无法理解,我过滤的输出与android.databaseenter image description here

我所试图做的是获得title(键入:TEXT)有一个fav(类型:BOOL),其值为TRUE从所有表中将它们显示在一个ListView(使用SimpleCursorAdapter)中。

+0

对于那些想知道的人,即使他们具有相同的属性,我也需要有不同的表格。因此,“合并数据库表”不是一种选择:) – iTurki

+0

LogCat说什么导致应用程序关闭的异常? –

+0

我更新了它,请看看 – iTurki

回答

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 

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

+0

虽然这似乎是解决方案,但它没有奏效! LogCat说:“没有这样的列fav'。如果我从查询中删除WHERE子句,一切都可以。仅供参考,我从XML文件导入它们(使用SQLite Manager FF Add-on)后,将fav列添加到表中。这是否有所作为? – iTurki

+0

我解决了它:-D。这就像你的代码。您只需要将'fav'属性添加到SELECT语句。不要问我为什么!谢啦。真的很感谢你的帮助:) – iTurki