如何将Room表导出为CSV格式?

问题描述 投票:0回答:1

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

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

我知道我也可以在其中一个DAO中编写一个查询方法,该方法返回CSV格式的字符串,然后可以将其转换为File对象。然而,这是很多工作,如果其他人为我这样做,我不会浪费我的时间。

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

奖金问题:有没有备份整个数据库的首选方法?

android csv android-room
1个回答
3
投票

我知道我可以获得实际数据库的路径并操纵该文件。然而,谷歌已经不遗余力地掩盖了SQLite的细节,这似乎是一个坏主意。

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

我知道我也可以在其中一个DAO中编写一个查询方法,该方法返回CSV格式的字符串,然后可以将其转换为File对象

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

如何将Room数据库表导出为CSV格式的字符串?

创建某种Report类,可以查询DAO,生成CSV,并将其写入您想要的位置。

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

有没有备份整个数据库的首选方法?

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

© www.soinside.com 2019 - 2024. All rights reserved.