Android Room数据库文件为空

时间:2018-05-16 13:39:00

标签: android sql android-room

在android中使用room for database。当我试图在sqlviewer中查看数据时,在数据库文件中找不到表 Myapp.db文件为空。 数据/数据/包/数据库/ Myapp.db

5 个答案:

答案 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)

我保存了整个文件夹,就是这样,我可以浏览表格。enter image description here