【问题标题】:Android: How to copy a SQLite database from one application to anotherAndroid:如何将 SQLite 数据库从一个应用程序复制到另一个应用程序
【发布时间】:2011-06-01 08:37:09
【问题描述】:

我有一个使用 SQLite 数据库的应用程序的精简版。当用户安装完整版时,我想将该数据库复制到应用程序的完整版。

我已经编写了一些代码来执行文件复制,但是 lite 数据库文件总是无法读取。文件在那里,我可以指向它,但我无法读取它来执行复制。

在 Android documentation 中,我们读到:

您可以将文件直接保存在 设备的内部存储。默认, 保存到内部存储器的文件 对您的应用程序是私有的,并且 其他应用程序无法访问它们 (用户也不能)。

注意“默认情况下”这句话。

有没有一种方法可以覆盖该默认值并使我的其他应用程序可以读取 SQLite 文件?

谢谢。

【问题讨论】:

    标签: android file sqlite copy io


    【解决方案1】:

    我相信你有两个选择。

    1. 在创建时将 sql 数据库设置为 world readable。您可以通过在对 openFileOutput() 或 openOrCreateDatabase() 的调用中设置适当的模式参数来做到这一点。
    2. 在两个应用程序的清单中设置sharedUserId 属性,使它们具有相同的用户ID。这会将两个应用程序视为同一个用户,从而使两个应用程序都可以访问同一组私有文件。

    【讨论】:

    • 请注意,如果您已经发布了 lite 应用程序,请不要更改 sharedUserId。其他人已经尝试过并将自己锁定在自己的更新之外。仅在未发布的项目上使用sharedUserId,而不是已经发布的项目。
    • 感谢您的快速回复。我认为我无法使用“WORLD_READABLE”方法,因为我正在使用 SQLiteDatabase.execSQL(...) 创建数据库。然而,关于“sharedUserid”方法,这可能是一种选择。我目前在 Market 中拥有该应用程序的完整版本。我计划发布精简版。两者都还没有 sharedUserId。如果我现在将 sharedUserId 添加到两者中,您是否预见到我会遇到任何问题?谢谢。
    • 正如 CommonsWare 所提到的,如果您已经发布了一个应用程序,那么更改 sharedUserID 将会有问题。为了有用,您必须在两个应用程序上设置 sharedUserID。您可能想采取不同的方法,也许为精简版添加功能,将数据库复制到 sdcard 或公共位置,然后将其与完整版一起复制下来。
    • 谢谢您,错误 454。我已经考虑完全按照您的建议进行操作,但我担心并非所有用户都有 SD 卡。我目前正在设置自定义内容提供程序,以便完整版可以将数据从精简版的数据库中提取出来,并将其填充到自己的数据库中。在我看来,这似乎是一个很好的解决方案——如果我能让它工作的话。 :^)
    猜你喜欢
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多