Android:无法在运行循环的中途打开数据库文件

Android:无法在运行循环的中途打开数据库文件,android,sqlite,Android,Sqlite,我有一个函数,它将SQLLite数据库中的数字相加,然后在同一个数据库中写入总数。当主活动等待时,我在后台任务中执行此操作 这在一段时间内正常工作,但在以下情况下失败,通常是在循环的中途: 编译时无法打开数据库文件(代码14)::PRAGMA journal\u模式 这种情况每次都发生在数据库中的不同行上,因此我不认为是一个条目导致了错误 我的代码--- 活动: ... calculateStats(); ... public void calculateStats(final Strin

我有一个函数,它将SQLLite数据库中的数字相加,然后在同一个数据库中写入总数。当主活动等待时,我在后台任务中执行此操作

这在一段时间内正常工作,但在以下情况下失败,通常是在循环的中途:

编译时无法打开数据库文件(代码14)::PRAGMA journal\u模式

这种情况每次都发生在数据库中的不同行上,因此我不认为是一个条目导致了错误

我的代码---

活动:

...
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);

 }
。。。
calculateStats();
...
公共无效calculateStats(最终字符串MY_组){
calculateTask=新的异步任务(){
@凌驾
受保护的Void doInBackground(Void…参数){
Looper.prepare();
StatCalculator calculator=新StatCalculator();
calculator.writeTotalA(MY_组);
calculator.writeTotalB(MY_组);
计算器=空;
返回null;
}
@凌驾
受保护的void onPostExecute(void结果){
}
};
calculateTask.execute(null,null,null);
}
StatCalculator:

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;
}
public void writeTotalB(字符串my_组){
DatabaseManager db=新的DatabaseManager(此);
DB_GROUP=“DB”+my_GROUP+“.DB”;
SQLiteDatabase groupDB=SQLiteDatabase.openDatabase(DB\u PATH+DB\u GROUP,null,SQLiteDatabase.OPEN\u READWRITE);
Cursor groupCursor=groupDB.query(“ItemTable”,null,null,null,null,null);
if(groupCursor!=null){
对于(int i=0;i
代码完全通过calculator.writeTotalA(MY_GROUP)
成功完成。崩溃总是在计算器运行到一半时发生。writeTotalB(我的小组)

我不确定这是不是因为我同时在读写这个数据库,还是什么。如果是这样的话,我想它会崩溃得更快

任何帮助都将不胜感激。

收到了

方法

db.update_byID(db_组,id,“Total”,totalPoints)

正在为每个条目打开数据库的新实例,但没有关闭它