我们可以在不使用Uri的情况下将数据插入数据库。但是当我们使用contentResolver时,我们需要Uri做任何事情。
与getContentResolver().insert(CONTENT_URI, values);
类似但在数据库查询执行中我们不需要任何Uri。像db.execSQL(String query);
一样。这是为什么?
答案 0 :(得分:1)
Content providers功能更强大(例如:可以访问的不仅仅是sql),而且比使用execSQL更安全(例如:打开sql注入攻击)。
这是便宜的答案,我知道我可以找到一些文档来支持这个。我会继续寻找链接。
答案 1 :(得分:1)
虽然我认为这个问题即将结束,但我认为你问的是为什么当你使用内容解析器时你必须使用CONTENT_URI,但是当你使用数据库时,你不这样做?
<强> Content Provider 强>
这是因为内容解析器提供的功能不仅仅是数据库
内容提供商存储和检索数据并使其可访问 所有申请。它们是分享数据的唯一方式 应用;所有Android套餐都没有通用的存储区域 可以访问。
Android附带了许多针对常见数据类型的内容提供商 (音频,视频,图像,个人联系信息等)。您 可以看到android.provider包中列出的一些。您可以 查询这些提供程序以获取它们包含的数据(尽管对某些人来说, 你必须获得阅读数据的适当许可。)
启动查询后, Android系统会识别内容 提供者,它是查询的目标,并确保它已启动 并且正在运行。
<强>数据库强>
使用数据库,无法通过内容提供程序从任何应用程序访问它(除非您编写一个)。使用db.execSQL,您只查询数据库而不是内容提供者,因此您不需要提供CONTENT_URI。您的db
对象是数据存储。