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

标签 android sqlite

我有一个函数,可以将 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/

相关文章:

android - 使用后退按钮关闭 PopupWindow?

javascript - Web SQL 数据库 - 执行异步调用并继续

android - 在多个 Android Activity 之间共享 sqlite 数据库

android - 有没有办法以编程方式获得显示刷新率?

android - 在协程内并行运行两个 Kotlin 协程

java - Room 不存储数据

c# - 与 SQLite/SubSonic(或任何其他数据库)一起使用时,避免在项目中使用 App.config 文件

ios - 如何使用 MagicalRecord 加载预先存在的 sqlite 文件?

android - 回收站查看问答

android - 从通知导航到父 Activity