我的申请有一个问题。
我创建了一个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();}
}
答案 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()时。 检查您的句柄是否有效以及数据库是否已打开。