【发布时间】:2011-09-29 15:35:21
【问题描述】:
我正在创建一个数据库助手类,对于其中的一些方法,我只查询数据库,而我正在向它写入其他方法。
我的理解是这两种方法都会打开数据库,让程序要么读取要么写入数据库。
对于查询语句,是否值得仅使用 getReadableDatabase() 或者两种方法之间的性能差异很小。
感谢您的宝贵时间。
【问题讨论】:
标签: android performance sqlite
我正在创建一个数据库助手类,对于其中的一些方法,我只查询数据库,而我正在向它写入其他方法。
我的理解是这两种方法都会打开数据库,让程序要么读取要么写入数据库。
对于查询语句,是否值得仅使用 getReadableDatabase() 或者两种方法之间的性能差异很小。
感谢您的宝贵时间。
【问题讨论】:
标签: android performance sqlite
它们返回相同的对象,除非磁盘已满或存在强制以只读模式打开数据库的权限错误。这个名字有点混乱:)
根据经验,您应该在 UI 线程之外调用这些方法。两者都可能需要很长时间才能返回。
如果您不打算编写数据库,请使用getReadableDatabase,因为它有助于您的代码清晰和意图。
更多信息here。
【讨论】:
getWritableDataBase,我也可以执行选择语句吗?
如果您查看 Google 的 NotePad 示例项目中的 NotepadProvider.java,您会发现它们同时使用这两种方法 - 取决于用例。
【讨论】:
如果您对数据库执行太多操作,例如查询,以某种随机顺序频繁更新,那么使用 getReadabledatabase 并没有任何意义,因为它只能用于读取值。
根据您的应用需求,您可以判断使用情况。如果您只是不断地读取这些值,那么您可以使用 getreadabledatabase。
注意:有时当您尝试使用 getwritabledatabase 打开可写数据库时,如果系统发现写入权限等异常,在这种情况下,系统可能会抛出异常。在这种情况下,您可以使用 getreadabledatabase 打开数据库。
【讨论】:
如果在实现并发(多线程)数据库调用时遇到“数据库已锁定”类型错误,请使用 getWritableDatabase 而不是 getReadableDatabase。
【讨论】:
以只读方式打开数据库应该会稍微提高性能,因为锁定开销会更低。
【讨论】: