导出的SQLite数据库不是最新的

时间:2018-12-18 13:41:38

标签: android database sqlite sqliteopenhelper android-9.0-pie

此问题仅适用于SDK 28设备(仿真器)。 使用SQLiteOpenHelper创建的我的SQLite数据库在应用程序中可以完美运行,但是当我将其导出到磁盘(通过Android Studio或通过代码)时,其许多数据都会丢失。在应用程序中对此数据库所做的更改将立即反映在应用程序中,但不会反映在导出的数据库文件中。我要导出的数据库文件位于以下位置:     DDMS->文件浏览器->数据->数据->我的包名称->数据库->我的数据库文件。 在SDK <28设备上,数据库文件可以很好地导出。

1 个答案:

答案 0 :(得分:0)

我独立解决了这个问题。

我发现数据库文件夹除了数据库本身之外还包含两个补充文件。文件夹的内容如下:

  • MyDatabase.db
  • MyDatabase.db-shm
  • MyDatabase.db-wal

没有这些文件,数据库是不完整的。

在SDK 28之前,只有一个补充文件,它不会影响数据库的完整性:

  • MyDatabase.db-journal

解决方案是在SQLiteOpenHelper中对数据库的单例实例执行.setWriteAheadLoggingEnabled(false):

SELECT * FROM my_table 
WHERE STR_TO_DATE(SUBSTRING_INDEX(my_table.`dates`, ',', 1), '%d-%m-%Y') >= '2018-01-01'
AND STR_TO_DATE(SUBSTRING_INDEX(my_table.`dates`, ',', - 1), '%d-%m-%Y') <= '2018-02-13'

这将恢复默认情况下在<28的SDK中使用的数据库日志记录设置。这样做为我提供了一个数据库文件,其中包含不依赖于补充文件的完整和最新数据。