getWritableDatabase()VS getReadableDatabase()

时间:2011-07-06 13:34:41

标签: android performance sqlite

我正在创建一个数据库助手类,对于其中的一些方法,我只是查询数据库和我写的其他人。

我的理解是这两种方法都会打开数据库,让程序只读或写入数据库。

对于查询语句,值得使用getReadableDatabase(),或者两种方法之间的性能差异很小。

感谢您的时间。

5 个答案:

答案 0 :(得分:18)

除非磁盘已满或存在一些强制以只读模式打开数据库的权限错误,否则它们将返回相同的对象。这个名字虽然有点令人困惑:)

根据经验,你应该在UI线程之外调用这些方法。两者都需要很长时间才能返回。

如果您不打算编写数据库,只需使用getReadableDatabase,因为它将有助于您的代码清晰度和意图。

更多信息here

答案 1 :(得分:2)

如果您在Google的NotePad示例项目中查看NotepadProvider.java,您会看到它们同时使用两者 - 具体取决于用例。

答案 2 :(得分:1)

如果你在数据库上做了太多操作,比如查询,经常以一些随机顺序更新,那么使用getReadabledatabase并没有任何意义,因为它只能用于读取值。

根据您的应用程序要求,您可以判断使用情况。如果您只是不断阅读这些值,那么您可以选择getreadabledatabase。

注意:有时当您尝试使用getwritabledatabase打开数据库时,如果系统发现类似写入权限的异常,那么系统可能会抛出异常。在这种情况下,您可以使用getreadabledatabase打开数据库。

答案 3 :(得分:0)

如果在实现并发(多线程)db调用时遇到'数据库已锁定'类型错误,请使用getWritableDatabase而不是getReadableDatabase。

答案 4 :(得分:-2)

以只读方式打开数据库应略微提高性能,因为锁定开销会降低。