数据库表在 Android Pie 9 中不可见
Database tables are not visible in Android Pie 9
我已经在 Android 9.0 Pie phone 上测试了我的应用程序(使用 sqlite 数据库),当我在 DB sqlite 浏览器中打开数据库时,它没有显示我创建的表格在我的 Sqlite 数据库中创建。我在 Android Studio 中的 Android 9.0 Pie 模拟器上做了同样的事情...但是数据库表不可见
您的问题可能是您只复制了数据库文件,而没有复制 -wal 和 -shm 文件。 尝试复制所有三个文件,然后表格可能可用。
- -wal 和-shm 文件与数据库文件同名,但分别以-wal 和-shm 为后缀。
原因是 Android Pie 打开时,默认模式是 WAL (write-ahead logging) 而不是以前的默认模式日志模式。
使用 journal 模式,更改将写入数据库并存储在日志文件中,允许从日志文件回滚更改。
使用 WAL 模式,更改将写入 -wal 文件(实际上是数据库的一部分),回滚有效地从 -wal 文件中删除更改。但是,如果 -wal 文件尚未提交到实际数据库,并且在没有 -wal 文件的情况下打开数据库,则更改似乎已丢失。
如果数据库完全关闭,这将检查点并将 -wal 文件中的更改包含到数据库文件中。
您可以使用 SQliteDatabase 方法 disableWriteAheadLogging(). If using a subclass of SQLiteOpenHelper then this can be issued by overriding the onConfigure 方法强制使用日志模式。
然而,这确实抑制了WAL模式的优势。
我已经在 Android 9.0 Pie phone 上测试了我的应用程序(使用 sqlite 数据库),当我在 DB sqlite 浏览器中打开数据库时,它没有显示我创建的表格在我的 Sqlite 数据库中创建。我在 Android Studio 中的 Android 9.0 Pie 模拟器上做了同样的事情...但是数据库表不可见
您的问题可能是您只复制了数据库文件,而没有复制 -wal 和 -shm 文件。 尝试复制所有三个文件,然后表格可能可用。
- -wal 和-shm 文件与数据库文件同名,但分别以-wal 和-shm 为后缀。
原因是 Android Pie 打开时,默认模式是 WAL (write-ahead logging) 而不是以前的默认模式日志模式。
使用 journal 模式,更改将写入数据库并存储在日志文件中,允许从日志文件回滚更改。
使用 WAL 模式,更改将写入 -wal 文件(实际上是数据库的一部分),回滚有效地从 -wal 文件中删除更改。但是,如果 -wal 文件尚未提交到实际数据库,并且在没有 -wal 文件的情况下打开数据库,则更改似乎已丢失。
如果数据库完全关闭,这将检查点并将 -wal 文件中的更改包含到数据库文件中。
您可以使用 SQliteDatabase 方法 disableWriteAheadLogging(). If using a subclass of SQLiteOpenHelper then this can be issued by overriding the onConfigure 方法强制使用日志模式。
然而,这确实抑制了WAL模式的优势。