SQLLite データベースの数値を合計し、同じデータベースに合計を書き込む関数があります。メイン アクティビティが待機している間、バックグラウンド タスクでこれを実行しています。
これはしばらくの間は適切に機能しますが、通常はループの途中で次のように失敗します。
データベース ファイルを開けません (コード 14):、コンパイル中: PRAGMA journal_mode
これは毎回データベースの異なる行で発生するため、1 つのエントリがエラーを引き起こしているとは思いません。
私のコード---
アクティビティ:
...
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)の途中で発生します
これが、このデータベースに対して同時に読み取りと書き込みを行っているためなのか、それとも何なのかはわかりません。だとしたらもっと早く壊れると思います。
どんな助けでも大歓迎です。