我有一个函数,可以将 SQLLite 数据库中的数字相加,然后将总数写入同一个数据库中。我正在后台任务中执行此操作,而主要 Activity 正在等待。
这可以正常工作一段时间,但会出现以下错误,通常是在循环进行到一半时:
无法打开数据库文件(代码 14):,编译时:PRAGMA journal_mode
这每次都发生在数据库中的不同行,所以我不认为它是一个条目导致了错误。
我的代码---
Activity :
...
calculateStats();
...
public void calculateStats(final String MY_GROUP){
calculateTask = new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
Looper.prepare();
StatCalculator calculator = new StatCalculator();
calculator.writeTotalA(MY_GROUP);
calculator.writeTotalB(MY_GROUP);
calculator = null;
return null;
}
@Override
protected void onPostExecute(Void result) {
}
};
calculateTask.execute(null, null, null);
}
统计计算器:
public void writeTotalB(String my_group){
DatabaseManager db = new DatabaseManager(this);
DB_GROUP = "DB" + my_group+ ".DB";
SQLiteDatabase groupDB = SQLiteDatabase.openDatabase(DB_PATH + DB_GROUP, null, SQLiteDatabase.OPEN_READWRITE);
Cursor groupCursor = groupDB .query("ItemTable", null, null, null, null, null, null);
if (groupCursor != null ) {
for (int i = 0; i < groupCursor .getCount(); i++) {
...
//calculating total here (totalPoints)
...
//write total to database:
db.update_byID(DB_GROUP , id, "Total", totalPoints);
}
}
groupDB .close();
groupCursor.close();
db = null;
}
代码使它完全通过 calculator.writeTotalA(MY_GROUP) 成功。崩溃总是发生在 calculator.writeTotalB(MY_GROUP)
的中途我不确定这是因为我同时读写这个数据库还是什么。如果是这样的话,我认为它会更快崩溃。
如有任何帮助,我们将不胜感激。
最佳答案
明白了。
方法
db.update_byID(DB_GROUP, id, "Total", totalPoints);
为每个条目打开一个新的数据库实例,然后不关闭它。
关于Android:无法通过功能循环中途打开数据库文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17774704/