android - 无法分配 CursorWindow

标签 android sql database sqlite android-cursor

我在我的 Android 应用程序中操作 SQLite3 数据库。我刚刚从具有 20 万行和 14 列的预填充数据库中读取。条目是单词。所有列的数据类型都是文本。查询最多 11 个字母的单词(例如 ABANDONMENT)工作正常。但对于 12 个或更多(例如 ABANDONMENTS),应用程序会崩溃。这是日志:

Could not allocate CursorWindow '//data//data//com.example.myapp//databases//database.sqlite' of size 2097152 due to error -12.
threadid=11: thread exiting with uncaught exception (group=0x40adf9f0)
FATAL EXCEPTION: Thread-2883
android.database.CursorWindowAllocationException: Cursor window allocation of 2048 kb failed. # Open Cursors=861 (# cursors opened by this proc=861)
at android.database.CursorWindow.<init>(CursorWindow.java:104)
at android.database.AbstractWindowedCursor.clearOrCreateWindow(AbstractWindowedCursor.java:198)
at android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:162)
at android.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:156)
at android.database.AbstractCursor.moveToPosition(AbstractCursor.java:161)
at android.database.AbstractCursor.moveToFirst(AbstractCursor.java:201)
at com.example.myapp.MainActivity.query(MainActivity.java:815)
at com.example.myapp.MainActivity$2.run(MainActivity.java:356)
at java.lang.Thread.run(Thread.java:856)

代码:

query = "select * from words where col_1 = \"" + (myWord)+ "\";";
cursor = database.rawQuery(query, null);
if (cursor != null)                                          
    cursor.moveToFirst(); // line 815
if (!cursor.isAfterLast()) {
    do {
        for (i = 1; i < cursor.getColumnCount(); i++) {
            temp = cursor.getString(i);
            //other stuff
        }
    } while (cursor.moveToNext());
    cursor.close();
}

那么这个错误是什么意思,为什么应用会崩溃?

最佳答案

错误-12 表示游标泄漏。

尝试关闭它:

try {....} finally {  cursor.close();}

关于android - 无法分配 CursorWindow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17495713/

相关文章:

java - 我正在尝试使用 JAVA 从字符串中获取 URL

javascript - html页面上动态填充的选择菜单将在不使用jquery mobile的情况下显示在android webview上

android - 我的应用程序在 Android 4.0 上变慢了很多

mysql - 不同查询不会使用 AND 运算符给出任何结果

android - 在android中动态生成的TextView下划线

mysql - 如何通过多个元组(行)找到共享一个属性(列)的对?

MySQL分段排序

mysql - SQL 获取在同一查询上执行更新的行的 ID

mysql - 如何在 SQL 查询中 JOIN 父级的类别表?

c# - 使用从第一个表返回的 ID 从两个相关表中删除