java - 按下电源按钮(屏幕关闭)时,Android SQLite 数据库被锁定

标签 java android

我从服务器获取大量信息并将它们加载到 SQLite 数据库中(大约 4000 行)。我正在使用以下代码插入信息:

String DB_PATH = "/data/data/com.example.app.myapplication/databases/";
            String DB_NAME = "mydb.sqlite";
            SQLiteDatabase sqdb = SQLiteDatabase.openDatabase(DB_PATH + DB_NAME, null, SQLiteDatabase.NO_LOCALIZED_COLLATORS);
            try {
                //Getting info
                sqdb.beginTransaction();
                String[] all_elements = all.split("_");
                for (int j = 0; j < all_elements .length; j++) {
                    if (all_elements [j].length() >= 1) {
                        m.setLength(0);
                        m.append("insert into .....the query");
                        m.append(");");
                        sqdb.execSQL(m.toString().replaceAll("\n", "").replaceAll("\r", "").replaceAll("\t", ""));

                        changeProgressMessage("Adding element " + String.valueOf(j + 1) + "/" + String.valueOf(all_elements .length));
                    }
                }
                sqdb.setTransactionSuccessful();
                sqdb.endTransaction();
            }
            catch (Exception ex)
            {
                Log.d("Error",ex.toString());
                sqdb.setTransactionSuccessful();
                sqdb.endTransaction();

            }

关键是,在插入信息时,如果我按下电源按钮或屏幕关闭,应用程序会崩溃,并且我会收到一条错误消息,指出数据库已锁定。 请注意,我正在使用另一个连接到 SQLite 数据库,但在使用第二个连接之前我将关闭它。

 db.openDataBase();

                String[] array_elements = array.split("_");
                for (int i = 0; i < array_elements .length; i++) {
                    String Details = "";
                    if (!array_elements [i].isEmpty() && !array_elements [i].equals("")) {

                        mbuilder.setLength(0);
                        mbuilder.append(array_elements [i] + ",'" + helper.getdatetime() + "'");

                        db.insertelements(mbuilder.toString(), "Element");
                        changeProgressMessage("Element" + String.valueOf(i + 1) + "/" + String.valueOf(array_elements .length) + " inserted");


                    }


                }
                db.close();

有什么帮助吗?

最佳答案

抱歉,伙计们,我不好,我是在 on resume 方法中访问数据库,所以当关闭屏幕然后打开时,On resume 方法也调用了其中的数据库方法,这解释了崩溃。

关于java - 按下电源按钮(屏幕关闭)时,Android SQLite 数据库被锁定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34919583/

相关文章:

java - 这个 Java 基准测试发生了什么?

android - 使用 'mm' 命令构建 wpa_supplicant

android - 通过使用通知操作按钮以编程方式在 android 通知的大 View 和普通 View 之间切换

android - RecyclerView 与 ImageViews,触摸缩放

android - 在 Android 上的电子邮件中,深层链接未显示为可点击链接

java - 如果要升级OS和DB版本,是否需要修改Java Web应用程序代码?

java - 使用 jdbc 驱动程序将 java 连接到 SQL Server

c# - 寻找用于表单和文档的 OCR SDK

java - 从带有对象的 ArrayList 中删除对象时出现问题

android - 在Android的内部存储特定文件夹中写入文件