准备更新语句时内存不足



我的应用程序有一个问题。

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

故障21(内存不足)在0x0时准备更新

谁能告诉我为什么会出现这个错误?

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();}
}

这可能与数据库本身无关,而是由于内存(堆)几乎满了,打开数据库完全填满了它。

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

有时在工作时我也得到同样的错误。

我使用了这个链接

"失败21(内存不足)"当执行一些SQLite操作

它说当你试图在一个关闭的数据库上工作时发生这个错误。我回头看看我的代码,发现我也在做同样的事情。让它工作之后

我认为你也在尝试一个封闭的数据库。

您是否尝试使用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();}
}

我有"内存不足"的错误(21),当我试图调用sqlite3_prepare()与NULL指针数据库句柄。检查句柄是否有效,数据库是否已打开。