【问题标题】:Create and read from snapshot in Android Room Databse在 Android Room 数据库中创建和读取快照
【发布时间】:2021-03-08 14:33:29
【问题描述】:

我需要创建我的数据库的快照并设置一些查询以从中读取。我知道这种方法sqlite3_snapshot_get(参考:sqlite docs)但我不知道如何在 android 中使用它。不知道通过参数传递什么。尝试了许多组合,例如:

val query = db.compileStatement("sqlite3_snapshot_get(database, \"database-shm\", \$snap1);")

或者这个:

val query = SimpleSQLiteQuery("sqlite3_snapshot_get(database, \"database-shm\", \$snap1);")
db.query(query)

但是这些尝试总是以错误E/SQLiteLog: (1) near "sqlite3_snapshot_get": syntax error 结束。所以我已经迈出了第一步,在设置了适当的快照后,我仍然需要从中读取(设置一些 Dao 查询以从中读取)。有没有合适的方法来实现这一点?

【问题讨论】:

    标签: android android-sqlite android-room


    【解决方案1】:

    我认为问题在于通常SQLITE_ENABLE_SNAPSHOT 编译时间选项已关闭,因此快照语句不可用时出现语法错误。

    • 通常不受支持的语句会导致语法错误。

    如果您参考https://www.sqlite.org/compile.html#enable_snapshot,您将看到此选项列在该部分中

    1. 启用通常关闭的功能的选项

    要使用快照语句,您需要使用SQLITE_ENABLE_SNAPSHOT 编译的 SQLite 版本,这不太可能在随 Android 分发的版本中提供,因此空间有限。不过,您不妨参考https://sqlite.org/android/doc/trunk/www/install.wiki,这可能是解决您问题的一种方式。


    补充评论:-

    我正在尝试解决我的问题并想出了 一个不同的想法。是否可以创建动态副本 应用程序生命周期内的数据库?该副本将仅存在大约 1-2 秒,因为我将它与最新的当前版本数据库进行比较,然后我会 删除它。

    我认为您不需要创建副本,只需使用两个相互结合的数据库文件即可。

    您可以使用ATTACH 并在构建房间数据库实例之前执行任务。您还可以有单独/多个房间数据库实例。

    【讨论】:

    • 嗯,这令人失望......在他们所说的使用 Room 的文档中,我可以利用 SQLite 的全部功能,这根本不是真的。谢谢你的回答。我正在尝试为我的问题考虑一个解决方案,并提出了一个不同的想法。是否可以在应用程序生命周期内创建数据库的动态副本?当我将它与最新的当前版本 db 进行比较时,该副本将只存在大约 1-2 秒,然后我会删除它。
    • @shurrok 也许sqlite.org/inmemorydb.html 可能在你的街道上。但是,要进行比较,您有多种选择。您可以将一个数据库附加到另一个数据库(不需要副本),完成后删除附件。如果您知道更改到期(您只需要从每个标头sqlite.org/fileformat.html#the_database_header 中读取 4 个字节),也许可以在标头中使用 application_id。我同意全功率并且不喜欢使用空间。虽然这不是房间限制,但它是 android 内置的 sqlite 限制。
    • 将一个数据库附加到另一个数据库是什么意思?
    • @shurrok sqlite.org/lang_attach.html 虽然冗长,但这个答案stackoverflow.com/questions/47705732/… 使用ATTACHDETACH,它是在android(不是房间)上完成的,并涵盖了文件(数据库)的一些问题) 路径。
    • 很遗憾...不幸的是,我的项目需要一个房间解决方案。我需要以某种方式从快照/副本或类似的东西中查询
    猜你喜欢
    • 1970-01-01
    • 2022-12-17
    • 2019-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多