如何将房间 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。
按照以下步骤操作非常简单:
- 在 Android Studio 上转到 查看 - 工具 - 设备文件资源管理器
- 导航至 /data/data/
/databases/ 并导出文件。
- 下载http://sqlitebrowser.org
- 在 SQLite 浏览器上打开 de DB,单击浏览数据,select table。
- 转到文件 - 导出 - 将 table(s) 导出为 CSV 文件...
来源:https://medium.com/@mattyskala/browse-sqlite-database-in-android-studio-4fbba6cca105
我现在有一个应用程序使用多个实体将数据存储在 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。
按照以下步骤操作非常简单:
- 在 Android Studio 上转到 查看 - 工具 - 设备文件资源管理器
- 导航至 /data/data/
/databases/ 并导出文件。 - 下载http://sqlitebrowser.org
- 在 SQLite 浏览器上打开 de DB,单击浏览数据,select table。
- 转到文件 - 导出 - 将 table(s) 导出为 CSV 文件...
来源:https://medium.com/@mattyskala/browse-sqlite-database-in-android-studio-4fbba6cca105