我现在有一个应用程序,它使用多个实体将数据存储在Room数据库中。我需要的是获取表的内容,将数据转换为CSV格式,然后通过电子邮件发送该格式。我按下最后一部分,因为它只涉及通过ACTION_SEND
的意图发送文件。这很简单。
我知道我可以获得实际数据库的路径并操纵该文件。然而,Room的设计师们竭尽全力将SQLite放入黑盒子中,这似乎是一个坏主意。
我知道我也可以在其中一个DAO中编写一个查询方法,该方法返回CSV格式的字符串,然后可以将其转换为File对象。然而,这是很多工作,如果其他人为我这样做,我不会浪费我的时间。
所以,这是我的问题:如何将Room数据库表导出为CSV格式的字符串?如果有多种方法,是否有首选方式?
奖金问题:有没有备份整个数据库的首选方法?
我知道我可以获得实际数据库的路径并操纵该文件。然而,谷歌已经不遗余力地掩盖了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)。