关于“count(*)”的rawQuery不返回任何行

时间:2012-05-02 18:09:50

标签: android sqlite

我正在尝试解决我在Ankidroid中遇到的数据库问题。执行了以下声明:

SELECT count(*) FROM cards c WHERE type = 1 AND combinedDue <
1335153600.000000

它是由there生成的。执行的代码如下(github link):

cursor = mDatabase.rawQuery(query, null);
if (!cursor.moveToNext()) {
  throw new SQLException("No result for query: " + query);
}

我无法理解我怎么没有记录,我应该得到1或0.日志中的调用堆栈如下:

at com.ichi2.anki.Deck.rebuildRevCount(Deck.java:1351)
    Caused by: android.database.SQLException: No result for query: ……
at com.ichi2.anki.AnkiDb.queryScalar(AnkiDb.java:129)
at com.ichi2.anki.Deck._rebuildRevCount(Deck.java:1621)

有什么想法吗?

事实上,我更关注类似案例。我们有一个“统计数据”表,其中包含一个“全球”列,其中可以有一个全球记录和许多日常记录。如果我们找不到(一个简单的选择)全局记录,我们就会创建它。在我的手机上,似乎有时没有找到全局记录,所以我们创建了一个额外的记录。 它看起来就像我上面展示的那样。

修改

我找到了原因。在另一个线程中,AsyncTask在进行查询的同时关闭数据库(因为GUI触发的大量处理是异步完成的)。它返回一个没有记录的游标。

我通过向文件添加痕迹看到了这一点。

1 个答案:

答案 0 :(得分:1)

尝试if (cursor.moveToFirst == false)而不是使用!运营商。我认为你现在这样做的方式总是将你带入if的主体。并且光标没有正确初始化。没有a.moveToFirst。