Android:在SD卡上使用SQLite数据库(完全不使用内部Android数据存储)

11

请问有没有人能给我一些关于在SD卡上使用SQLite文件的链接/教程?我不想实现OpenHandler。

/SD CARD//info.db

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

谢谢。

2个回答

18

4
好的建议,但你至少应该提到一下,当应用程序因为没有安装SD卡而无法加载数据库时会发生什么,即使只是顺带一提也好。这只是会出现的200万个问题之一 :) - KevinDTimm
2
哦,好主意!我完全忘了提到SD卡可能不可用。你注意到这点真是太好了,因为我的当前项目也需要将数据缓存到SD卡上的SQLite数据库中(如果可用)。 - mreichelt
@mreichelt 我已经这样做了,但是当安装应用程序时,它仍会在内部存储上创建数据库。我还使用了context.getExternalFilesDir(null).getAbsolutePath() + "/" + DATABASE_NAME而不是硬编码sdcard路径,但没有起作用。 - Code_Worm

8
我建议您不要将数据库放在SD卡上,因为这会存在部分安全问题(任何拥有设备和SD卡的物理访问权限的人,包括运行在设备上的所有应用程序,都将具有更多或更少的完全访问权限),同时也会存在硬件问题(SD卡的寿命是有限的,这取决于可以在其上执行的写操作的总数)。这些问题也在这里讨论:SQLite database on SD card

能否对SD卡上的数据库进行加密/解密?因为需要保护数据免受其他应用程序的侵害。 - Mahendran
1
从技术上讲应该是可能的,因为SQLite数据库是一个文件数据库。但具体实现可能会影响性能(例如,如果由于某种原因需要在每次读取操作中解密数据库)。 - dbm
对于错误答案进行负面评价,抱歉。特别是从明天开始(或一个月前,我不记得了)API 30中的强制作用域访问,安全性已经不再是问题。“硬件问题”的概念也不是问题。任何性能下降都是可衡量的。这里所述的问题可以重新表述为如何处理入门级设备上有限的内部存储空间。请坚持主题问题,不要发明新问题。 - halxinate
@halxinate - 感谢你对我投票反对的鼓励(如果更多人像你这样在一般情况下投反对票,那就太好了)。然而,我认为你的语气是不必要的。请记住,你正在评论一个十年以上的答案 - 自那以来,事情已经发生了变化,每个人都知道。 - dbm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接