Android:无法在功能循环中途打开数据库文件

时间:2013-07-21 16:59:30

标签: android sqlite

我有一个函数可以从SQLLite数据库中添加数字,然后在同一个数据库中写入一个总数。我在主要活动等待的后台任务中执行此操作。

这可以正常工作一段时间,但是在下面失败,通常大约是循环的一半:

无法打开数据库文件(代码14):,编译时:PRAGMA journal_mode

每次都会在数据库中的不同行发生这种情况,所以我不认为它会导致错误。

我的代码---

的活动:

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

 }

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;
}

代码完全通过 calculator.writeTotalA(MY_GROUP)成功完成。崩溃始终发生在 calculator.writeTotalB(MY_GROUP)

的中途

我不确定这是因为我正在同时阅读和写入这个数据库或者是什么。如果是这样的话,我认为它会很快崩溃。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

知道了。

方法

db.update_byID(DB_GROUP,id,“Total”,totalPoints);

为每个条目打开一个新的数据库实例,然后不关闭它。