我的应用程序有一个问题。
我创建了一个AsyncTask从服务器下载文件列表。当所有的文件下载之后,我更新数据库。但是当我调用更新查询它给我下面的错误。
故障21(内存不足)在0x0时准备更新
谁能告诉我为什么会出现这个错误?
public void setStatus(int index)
{
try
{
db.OpenDatabase();
db.updateStatus(id.get(index), 1);
db.closeDatabase();
}
catch(Exception e)
{
e.printStackTrace();
}
}
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指针数据库句柄。检查句柄是否有效,数据库是否已打开。