Android SQLite在应用中数据保存查询,但是拷贝的xxx.db没有数据或没有更新,.db_wal和.db_shm文件

Posted 怪兽N

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android SQLite在应用中数据保存查询,但是拷贝的xxx.db没有数据或没有更新,.db_wal和.db_shm文件相关的知识,希望对你有一定的参考价值。

android SQLite在应用中数据保存能查询,但是拷贝的xxx.db没有数据或没有更新问题,.db_wal和.db_shm文件是什么

问题

拷贝ROOM数据库data/data/com.xxx.xxx/databases/xxx.db到Windows下,使用DB browser for SQLite工具打开,发现数据没有更新。但是debug应用,使用ROOM保存数据,保存成功并且能查询到数据,但是拷贝出来的xxx.db就是没有数据。

原因

数据库没有关闭!!!能查询到数据的原因是内容在磁盘缓存里,还是可以查到的,但是没有写到xxx.db文件中。经过测试重新开机也不会自动写到xxx.db文件中,要在代码中close();

如下图关闭数据不关闭数据库,应用退出也没关闭数据库
在这里插入图片描述

如下图关闭数据后,这是拷贝出来的数据库,就有数据了
在这里插入图片描述

解决方法

在应用退出的适当时机,调用数据库的close()方法,如在MainActivity的onDestroy()中close()。当你看到.db_wal和.db_shm文件文件出现时,说明数据库正在使用或者没有关闭。

    override fun onDestroy() {
        super.onDestroy()
        mysqliteOpenHelper.close()
        //myRoomDb.close()
    }

SQLite的.db_wal和.db_shm文件

这两个文件是SQLite原子操作的缓存,当更新一些记录时,先写入.db_wal和.db_shm文件。然后,在关闭数据库或缓存到一定大小时才会写到.db文件中。这是个人理解,请自行深入学习。

以上是关于Android SQLite在应用中数据保存查询,但是拷贝的xxx.db没有数据或没有更新,.db_wal和.db_shm文件的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android 应用程序中执行 SQLite 查询?

在 Android 上同时将数据保存在内存和数据库中的最佳实践

android SQLite中数据库查询,如何查询一段时间内的记录

如何将 SQLite 数据库(SQLite Firefox 扩展)连接到 Android 应用程序,以便 android 2.1 查询并插入数据库

如何在android中使用游标(sqlite查询)搜索数据库

Android - 在 SQLite 数据库中保存位置