android中的游标和SQLite出错

时间:2012-04-07 16:25:46

标签: android database sqlite cursor

我在阅读数据库时出现光标错误:

04-07 18:11:25.672: ERROR/AndroidRuntime(5801): android.database.CursorWindowAllocationException: Cursor window allocation of 2048 kb failed. # Open Cursors=666 (# cursors opened by this proc=666)

它发生在

cursor.getCount()

整个文件是8kb,它有32行,但ID从737到768,是不是问题呢?

(我注意到如果ID低于600,则没有问题)

2 个答案:

答案 0 :(得分:0)

(OP在问题编辑中回答问题。转换为社区维基答案。请参阅Question with no answers, but issue solved in the comments (or extended in chat)

OP写道:

  

我解决了这个问题。我的代码是:

public News getNewsWithID(int id){
        Cursor c = bdd.query(TABLE_NEWS, new String[] {COL_ID, COL_ASSO, COL_DATE, COL_HEURE, COL_TYPE, COL_TITRE, COL_CONTENU, COL_SERVEURID}, COL_ID +"='"+ id +"'" , null, null, null, null);
        return cursorToNews(c);
    }
  

我改为:

public News getNewsWithID(int id){
        Cursor c = bdd.query(TABLE_NEWS, new String[] {COL_ID, COL_ASSO, COL_DATE, COL_HEURE, COL_TYPE, COL_TITRE, COL_CONTENU, COL_SERVEURID}, COL_ID +"='"+ id +"'" , null, null, null, null);
        News temp = cursorToNews(c);
        c.close();
        return temp;
    }

我以为光标是在onDestroy()上关闭的。

答案 1 :(得分:0)

您应该在finally块中关闭光标,以确保即使发生异常也将其关闭。

public News getNewsWithID(int id){
    Cursor c = bdd.query(TABLE_NEWS, new String[] {COL_ID, COL_ASSO, COL_DATE, COL_HEURE, COL_TYPE, COL_TITRE, COL_CONTENU, COL_SERVEURID}, COL_ID +"='"+ id +"'" , null, null, null, null);
    try {
        return cursorToNews(c);
    } finally {
        c.close();
    }
}