我已经在Android 9.0 Pie手机上测试了我的应用程序(使用sqlite数据库),当我在DB sqlite浏览器中打开数据库时,它没有显示我在Sqlite数据库中创建的表。我在Android Studio中的Android 9.0 Pie模拟器上做了相同的操作...但是数据库表不可见
您的问题可能是您只复制了数据库文件,而没有复制-wal和-shm文件。 尝试复制所有三个文件,然后这些表将可能可用。
原因是在启用Android Pie的情况下,默认模式为WAL (write-ahead logging),而不是以前的默认模式为日记模式。
使用journal模式更改将被写入数据库,并存储在日志文件中,从而允许更改从日志文件回滚。
使用WAL模式,将更改写入-wal文件(实际上是数据库的一部分),回滚有效地从-wal文件中删除更改。但是,如果尚未将-wal文件提交到实际数据库,并且在没有-wal文件的情况下打开了数据库,则更改似乎已丢失。
如果数据库完全关闭,这将检查点并将-wal文件中的更改包括到数据库文件中。
您可以通过使用SQliteDatabase方法disableWriteAheadLogging()强制使用日记模式。如果使用SQLiteOpenHelper的子类,则可以通过重写onConfigure方法来发出。
但是,这确实限制了[[WAL模式的优点。