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 查询并插入数据库