在android中使用room for database。当我试图在sqlviewer中查看数据时,在数据库文件中找不到表 Myapp.db文件为空。 数据/数据/包/数据库/ Myapp.db
答案 0 :(得分:46)
转到文件夹Data / data / packageName / databases /必须有三个文件.db
,.db-shm
,.db-wal
,将所有三个文件复制到一个位置,然后打开Myapp .db打开db文件需要这两个额外的文件
答案 1 :(得分:13)
在android studio 3.1中。*
通常在工具窗口栏中单击“ Device File explorer
”,您可以在屏幕的右下角找到它。
在data/data/your-application-package/databases
中打开目录
具有新架构的3个文件在数据库目录中创建
your-database-name
your-database-name-shm
your-database-name-wal
您必须将所有3个导出到同一目录中
然后在任何sqlite浏览器中打开第一个文件(仅具有your-database-name)。
现在您可以看到所有数据.......
your-database-name-shm
your-database-name-wal
这两个额外的文件需要打开db文件 如果您仅打开数据库文件,则在该文件中找不到任何表
答案 2 :(得分:7)
确保退出应用程序时数据库已关闭,这将确保所有未完成的事务都已提交:
@Override
protected void onDestroy() {
super.onDestroy();
// close the primary database to ensure all the transactions are merged
MyAppDatabase.getInstance(getApplicationContext()).close();
}
然后,您可以使用Android Studio中的设备文件资源管理器将数据库复制到设备上(在/ data / data / <您的应用程序包名称> /数据库下查找)。
您也可以force a WAL checkpoint而不是关闭数据库,但是我谦虚地认为,此选项更容易(除非您尝试通过程序或类似方式在应用程序中备份数据库),并且关闭数据库是一个好主意(即使Android Room文档中并未真正提及)。
在此处详细了解有关sqlite WAL的信息:https://www.sqlite.org/wal.html
答案 3 :(得分:0)
一旦检查您的数据库类,
@Database(entities = arrayOf(Test::class), version = 1, exportSchema = false)
abstract class MyDatabase:RoomDatabase() {
private var INSTANCE: MyDatabase? = null
abstract fun testDao(): TestDao
}
在这里,MyDatabase是我的Database类,Test是表名,TestDao是Dao类。
答案 4 :(得分:0)