var csr = db.getOpenHelper().writableDatabase.query("SELECT $THETABLE_ID_COLUMN AS ${BaseColumns._ID}, $THETABLE_OTHER_COLUMN FROM $THETABLE_TABLENAME")
var csr2 = db.getOpenHelper().writableDatabase.query("SELECT $THEOTHERTABLE_ID_COLUMN AS ${BaseColumns._ID}, $THEOTHERTABLE_OTHER_COLUMN, $THEOTHERTABLE_ANOTHER_COLUMN FROM $THEOTHERTABLE_TABLENAME;")
3条答案
按热度按时间jgovgodb1#
备份数据库文件要简单得多,而且可能比尝试操作CSV数据更快。
还有一个优点是,只需复制文件,就可以在SQLite工具中使用数据库。
P.S.扩展(例如. csv.db)只是文件用途的指示。在示例中使用了
.whatever
。这里有一个示例/演示应用程序,它使用一个Room数据库,其中只有一个表,只有2列。当应用程序运行时,有一个具有4个UI组件的单个Activity:
data/data/the_package_name/databases
*RoomEntities(所有数据库代码,包括备份和恢复代码):-
字符串
从代码中可以看出,备份和恢复基本上只是复制文件。
活动的布局是:-
型
主活动(MainActivity):
型
结果
当第一次运行时,则显示为:-
x1c 0d1x的数据
如果单击备份按钮,则文件将被备份(即使没有数据(但文件中实际上会有一些数据,例如文件头和系统表))。
如果在单击“备份”按钮后,单击了“恢复”按钮(即使未添加数据),则实际上恢复了数据库并重新启动了应用程序。
如果单击“添加数据”按钮,将添加并显示3行数据(如果再次单击,将添加另外3行数据,依此类推)。
的
因为之前单击了“备份”按钮。单击恢复按钮将恢复到没有数据的备份,并重新启动显示没有数据的应用程序。
的
添加2组数据并单击“备份”按钮
的
添加另外2组数据
x1c4d 1x的
单击恢复,然后数据将恢复为6行数据
型
omqzjyyz2#
这是一个CSV解决方案,将备份和恢复所有非系统/房间/Android表但是,它不处理BLOB(这是更复杂的)它可能有空间问题,它可能有问题,如果外键约束包括在内(备份文件是建议的方式,因为它是远远不太可能遇到问题,除了建议的应用程序重新启动,这只是一个不便)。
此外,为了简洁和方便起见,
它围绕着4个函数,在这个例子中,在@Database注解类(
TheDatabase
)中。这些职能是:getTableColumnnames
(参见示例/演示)createAutoCSV
函数传递)返回提供的表名中的列列表createAutoCSV
(参见示例/演示)writeText
可能更安全restoreFromCSV
函数)。{COMMA}
(值可以很容易地更改),就像许多值是常量一样。String this返回的CSV示例如下:-
字符串
{START}
和{END}
表示数据的开始和结束(实际上不需要)。{TABLE}
表示,后面跟着逗号和表名本身。backupAsCSV()
(参见示例演示)restoreFromCSV
(参见示例/演示)工作示例/演示
下面是完整的代码:
文件/类:-
RoomEntities.kt
(为了方便/简洁起见,所有数据库代码都在一个文件中)型
MainActivity
(布局应该很容易构建-请参阅lateinit
)型
单击一次【添加数据】(第一个表3行,第二个表4行),然后单击【备份】和【CSV备份】按钮后运行。
x1c 0d1x的数据
然后再次点击【添加数据】按钮,在备份后添加一些数据。
的
然后点击【CSV恢复】按钮
的
再次单击一次或多次“添加数据”,然后单击“恢复”按钮(从文件备份恢复)
的
fruv7luv3#
1.运行应用程序
1.在应用程序中执行操作以创建数据库,并填充所需的数据
的数据
1.在下拉菜单中,选择具有要导出的数据库的设备。对我来说就是这个模拟器
的
1.导航到
data/data/your.app.package.name/databases
1.右键单击DB文件>保存为
的