准备更新语句时Sqlite内存不足

时间:2011-04-11 10:07:37

标签: android database

我的申请有一个问题。

我创建了一个AsyncTask,用于从服务器下载文件列表。在我更新数据库之后下载所有文件时。但是,当我调用更新查询时,它给我以下错误。

  

在0x0时失败21(内存不足)   准备更新

任何人都可以告诉我为什么会出现这个错误吗?

示例代码

public void setStatus(int index)
{
    try
    {
        db.OpenDatabase();
        db.updateStatus(id.get(index), 1);
        db.closeDatabase();
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
}

从AsyncTask调用上面的函数....

public void updateStatus(int id,int status)
{
    try
    {
        db.execSQL("update sample set status =" + status + " where id = " + id);
    }
    catch(Exception e){e.printStackTrace();}
}

4 个答案:

答案 0 :(得分:1)

这可能与数据库本身无关,而是与内存(堆)几乎已满并打开数据库完全填满的事实有关。

请记住,大多数手机都有48MB的堆,甚至更少。

答案 1 :(得分:1)

在工作的某个时候我也遇到了同样的错误。

我使用了这个链接

"Failure 21 (out of memory)" when performing some SQLite operations

它表示当您尝试处理已关闭的数据库时会发生此错误。 我回顾了我的代码,发现我也在做同样的事情。后来工作了

我认为你也在努力研究一个封闭的数据库。

答案 2 :(得分:0)

您是否尝试使用update()方法而不是execSQL()?

public void updateStatus(int id,int status)
{
    try
    {
         ContentValues values = new ContentValues();
         values.put("status", status);
         db.update ("sample", values, "id = ?", new String[]{Integer.toString(id)});
    }
    catch(Exception e){e.printStackTrace();}
}

答案 3 :(得分:0)

我有#34;内存不足"错误(21)当我尝试使用指向数据库句柄的NULL指针调用sqlite3_prepare()时。 检查您的句柄是否有效以及数据库是否已打开。