【问题标题】:Android: use SQLite database on SD Card (not using internal Android Data Store at all)Android:在 SD 卡上使用 SQLite 数据库(根本不使用内部 Android 数据存储)
【发布时间】:2010-12-13 20:30:48
【问题描述】:

谁能给我一些使用存储在 SD 卡上的 SQLite 文件的链接/教程?没有实现 OpenHandler。

/SD卡//info.db

我想使用外部 SQlite 数据库文件(不使用 Android 内部数据存储),因为我想经常更新数据库文件以提供有关 info.db 的更多最新信息。

谢谢。

【问题讨论】:

    标签: android sqlite


    【解决方案1】:

    您是否尝试过使用SQLiteDatabase.openOrCreateDatabase(String, SQLiteDatabase.CursorFactory)?您可以简单地将"/sdcard/info.db" 作为第一个参数,将null 作为第二个参数。

    【讨论】:

    • 好建议,但你不应该提到,至少顺便提一下,当应用程序因为没有安装 SD 卡而无法加载数据库时会发生什么? - 在其他 200 万件会出错的事情中 :)
    • 哦,好点子!我完全忘了提到 SD 卡可能不可用。完美,因为我当前的项目还需要将数据缓存到 SD 卡上的 SQLite DB 中(如果可用)。
    • @mreichelt 我这样做了,但仍然是我在安装应用程序时它在内部存储上创建数据库我还使用了 context.getExternalFilesDir(null).getAbsolutePath() + "/" + DATABASE_NAME 而不是硬编码 sdcard路径,但没有工作
    【解决方案2】:

    由于部分安全问题,我建议您不要将数据库放在 SD 卡上(每个可以物理访问设备和 SD 卡的人,包括设备上运行的所有应用程序,也将拥有更多或对数据库文件的完全访问权限较少),但也由于硬件问题(SD 卡的使用寿命有限,就可以对其执行的写入操作总数而言)。

    这里也讨论了这些问题:SQLite database on SD card

    【讨论】:

    • 是否可以加密/解密 sdcard 上的数据库。由于日期需要被其他应用程序保护。
    • 这应该是可能的(技术上),因为 SQLite 数据库是一个文件数据库。根据实现,它可能会影响性能(例如,如果您出于某种原因需要为每个读取操作解密数据库)。
    • 投反对票作为错误答案,对不起。尤其是从明天开始(或一个月前,不记得)API 30 中的强制范围访问,安全性不再是问题。 “硬件问题”的概念也不是问题。任何性能下降都是可以测量的。这里所说的问题可以改写为如何处理入门级设备上有限的内部存储。请坚持主题问题,不要发明新问题。
    • @halxinate - 感谢您投反对票的动力(如果有更多的人在投反对票时效仿您的榜样,我真的很高兴)。然而,我确实觉得你的语气是多余的。请记住,您评论的是一个 10 多年前的答案 - 从那以后情况发生了变化,每个人都知道这一点。
    猜你喜欢
    • 2017-12-19
    • 2010-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多