1

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

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

它是在那里生成的。执行的代码如下(github链接):

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)

任何想法?

事实上,我更多的是在看一个类似的案例。我们有一个表«Stats»,其中有一列“全局”,其中可以有一个全局记录和许多每日记录。如果我们没有找到(一个简单的select)全局记录,我们创建它。在我的手机上,似乎有时找不到全局记录,所以我们创建了一个额外的记录,这会破坏事情。它真的看起来像我上面展示的情况。

编辑

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

我通过将跟踪添加到文件中看到了这一点。

4

1 回答 1

1

尝试if (cursor.moveToFirst == false)而不是使用 ! 操作员。我认为您当前的操作方式总是会将您传递到 if 的主体中。并且光标没有正确初始化。没有 a.moveToFirst。

于 2012-05-02T19:25:22.747 回答