Android:通过 Content Provider 访问 SQLite 数据库还是实现 DAO?
Posted
技术标签:
【中文标题】Android:通过 Content Provider 访问 SQLite 数据库还是实现 DAO?【英文标题】:Android: access SQLite database via Content Provider or implement DAO? 【发布时间】:2012-11-12 15:12:37 【问题描述】:我想知道访问我的应用程序数据库的最佳方法是:使用内容提供程序,还是手动实现我的 DAO? 从我最近的调查来看,内容提供者似乎更可取,即使是应用程序内部使用,但我不知道每种方法的缺点是什么。 您能对此提供一些反馈吗?
【问题讨论】:
【参考方案1】:如果您担心数据库的关闭或锁定,我更喜欢使用ContentProvider 。 检查Simple Content Provider for db operations
【讨论】:
我正面临数据库在多进程中被锁定的问题。我应该使用内容提供者来解决这个问题吗?【参考方案2】:来自谷歌Docs。
开始构建之前
在开始构建提供程序之前,请执行以下操作 下列的:确定您是否需要内容提供商。 您需要构建内容 如果您想提供以下一项或多项功能,则提供者:
您想向其他应用程序提供复杂的数据或文件。 您希望允许用户将复杂数据从您的应用程序复制到其他应用程序。 您想使用搜索框架提供自定义搜索建议。如果使用 SQLite 数据库,您不需要 完全在您自己的应用程序中。
但是当我阅读这篇文章和其他一些帖子时,我有点困惑。如果内容提供程序事件仅供您自己的应用使用,那么使用它是否有意义?
【讨论】:
阅读完所有内容后,我决定选择内容提供商选项。进一步开发,数据库管理和同步变得容易【参考方案3】:来自 ContentProvider 文档:
内容提供程序是 android 应用程序的主要构建块之一,为应用程序提供内容。它们封装数据并通过单个 ContentResolver 接口将其提供给应用程序。仅当您需要在多个应用程序之间共享数据时才需要内容提供程序。例如,联系人数据由多个应用程序使用,并且必须存储在内容提供程序中。如果您不需要在多个应用程序之间共享数据,您可以通过 SQLiteDatabase 直接使用数据库。
在我看来,如果您不打算与其他应用程序共享数据,则不需要内容提供者。
链接:http://developer.android.com/reference/android/content/ContentProvider.html
【讨论】:
这不再相关,因为ContentProvider
(事件内部)是CursorLoader
的最佳数据源)
请记住,最高 Android 4.2 的内容提供程序默认可用于其他 Android 应用程序。仅从 4.3 开始默认导出:false以上是关于Android:通过 Content Provider 访问 SQLite 数据库还是实现 DAO?的主要内容,如果未能解决你的问题,请参考以下文章
android——Installation error: INSTALL_FAILED_CONFLICTING_PROVIDER 解决方案
我的Android进阶之旅解决安装apk时出现错误:INSTALL_FAILED_CONFLICTING_PROVIDER : Package couldn‘t be installed in(代码片
通过 android.widget.RemoteViewsService 访问时的 Content Provider 权限
Android:通过 Content Provider 访问 SQLite 数据库还是实现 DAO?
动态查询的传参测试,关于#和$在Integer下传0..o(^▽^)o
使用Vue自定义组件时,报did you register the component correctly? For recursive components, make sure to provid