我正在尝试在我的应用程序中创建某种备份和恢复功能。在此之前,我已经阅读了一段时间以了解是否可以实现,但我发现了这个问题: Sqlite DB Android Backup/Restore
The only other way I could see to do it, would be to read the actual contents of the DB and generate a file containing the SQL which which it can be restored from, this is obviously a more complex and doesn't offer any advantages to justify this complexity.
我认为这个答案是实现这一目标的最佳方法;不是探索 .db 文件,而是导出查询。
你知道;当您从 mysql 导出 SQL 数据时,您会得到一个文件,其中包含创建结构的所有查询以及用数据填充结构的查询。
这就是我想要模仿的;生成一个包含 .db 文件中的 sql 查询的文件。
你们认为这可能吗?我的意思是,是否有任何内置方法可以实现这一目标?
否则,如果它太难处理,您如何设法避免该用户( https://stackoverflow.com/a/10842043/1943607 )正在谈论的内容?
So, I disabled WAL with "PRAGMA journal_mode = DELETE" and then I was able to view the database in the browser and able to restore it on my test device fine.
前面那部分,我看不懂。这是您为 sqlite 设置的配置吗?
谢谢
最佳答案
我实际上并没有用 sqlite 尝试过这个,但是用 mysql 你可以做一些事情,比如创建数据库的“转储”。这些转储包含的正是您所描述的内容:一组查询,当一起执行时,会重新创建数据库,包括内容。
从 http://www.sqlite.org/sqlite.html 中找到的“sqlite3”文档来看(特别是“将整个数据库转换为 ASCII 文本文件”部分),您可以对 sqlite 执行相同的操作。由于您可以从 java 应用程序执行 shell 命令(使用 Runtime.getRuntime().exec() 方法),并且您是数据库的“所有者”(Linux 用户 ID),因此您应该能够运行此“sqlite3 .即使在非 root 设备上也可以使用 dump” 命令。我从未见过没有安装 sqlite3 工具的 Android 设备,因此该命令应该始终可用。
此外,由于转储文件只是一个文本文件,因此您应该能够在其中添加兼容性所需的任何 PRAGMA(如您引用的文件)。
我还没有测试过这些,只是想和你一起思考这个有趣的话题。
关于android - 有没有办法从 SQLite 中提取查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15495128/