如何将房间 table 导出为 CSV 格式?

How does one export a Room table to a CSV format?

我现在有一个应用程序使用多个实体将数据存储在 Room 数据库中。我需要的是获取 table 的内容,将数据转换为 CSV 格式,然后通过电子邮件发送该格式。我已经确定了最后一部分,因为它只涉及通过带有 ACTION_SEND 的意图发送文件。很简单。

我知道我可以获得实际数据库的路径并操作该文件。然而,Room 的设计者竭尽全力将 SQLite 放入黑盒中,这似乎是个坏主意。

我知道我还可以在其中一个 DAO 中编写一个查询方法,returns 一个 CSV 格式的字符串,然后可以将其转换为一个文件对象。但是,这是很多工作,如果有人为我完成了,我不会浪费时间。

那么,我的问题是:如何将 Room 数据库 table 导出为 CSV 格式的字符串?如果有多种方法,是否有首选方法?

额外问题:是否有任何首选方法来备份整个数据库?

I understand that I can get the path to the actual database and manipulate that file. However, Google has gone to such lengths to obscure the SQLite details that this seems like a bad idea.

Google 提供 getOpenHelper() on your RoomDatabase,如果您有理由想要更直接地使用数据库(例如,执行不在您的 DAO 中的任意 SQL)。

I know that I can also write a query method in one of the DAOs that returns a string in CSV format that can then be turned into a File object

恕我直言,创建 CSV 文件不是 DAO 的责任,就像填充小部件不是 DAO 的责任一样。

How do I export a Room database table into a CSV formatted string?

创建某种可以查询 DAO、生成 CSV 并将其写入所需位置的 Report class。

或者,查找一些现有代码,这些代码可以采用 Cursor 并从中生成 CSV。使用 getOpenHelper() 得到一个 SupportSQLiteDatabase,你可以 query() 与你想要的 SQL 生成 Cursor.

Is there any preferred way to back up the entire database?

恕我直言,close() RoomDatabase,然后复制文件(using getDatabasePath() 和 Java 文件 I/O)。

使用 kotlin-csv 库将 Room DB table 导出到 Kotlin 中的 CSV 文件真的很容易。

只需获取数据库 table 个对象的列表:

@Dao
interface DirectorDao {
    @get:Query("SELECT * FROM director ORDER BY full_name ASC")
    val allDirectors: LiveData<List<Director>>
}

然后用户 CSV 编写器通过遍历所有列表项并将列值逐一添加到 CSV 行来写入文件,如下所示:

csvWriter().open(csvFile) {
    // Header
    writeRow(listOf("[id]", "[name]", "[age]"))

    directorDao.allDirectors.value.forEachIndexed { index, director ->
        writeRow(listOf(index, director.fullName, director.age))
    }
}

我解释整个流程here

按照以下步骤操作非常简单:

  1. 在 Android Studio 上转到 查看 - 工具 - 设备文件资源管理器
  2. 导航至 /data/data//databases/ 并导出文件。
  3. 下载http://sqlitebrowser.org
  4. 在 SQLite 浏览器上打开 de DB,单击浏览数据,select table。
  5. 转到文件 - 导出 - 将 table(s) 导出为 CSV 文件...

来源:https://medium.com/@mattyskala/browse-sqlite-database-in-android-studio-4fbba6cca105