我正在尝试解决我在 Ankidroid 中遇到的数据库问题。执行了以下语句:
SELECT count(*) FROM cards c WHERE type = 1 AND combinedDue <
1335153600.000000
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 触发的许多处理都是异步完成的)。它返回一个没有记录的游标。
我通过将跟踪添加到文件中看到了这一点。