我正在创建一个数据库助手类,对于其中的一些方法,我只是查询数据库和我写的其他人。
我的理解是这两种方法都会打开数据库,让程序只读或写入数据库。
对于查询语句,值得使用getReadableDatabase(),或者两种方法之间的性能差异很小。
感谢您的时间。
答案 0 :(得分:18)
除非磁盘已满或存在一些强制以只读模式打开数据库的权限错误,否则它们将返回相同的对象。这个名字虽然有点令人困惑:)
根据经验,你应该在UI线程之外调用这些方法。两者都需要很长时间才能返回。
如果您不打算编写数据库,只需使用getReadableDatabase
,因为它将有助于您的代码清晰度和意图。
更多信息here。
答案 1 :(得分:2)
如果您在Google的NotePad示例项目中查看NotepadProvider.java,您会看到它们同时使用两者 - 具体取决于用例。
答案 2 :(得分:1)
如果你在数据库上做了太多操作,比如查询,经常以一些随机顺序更新,那么使用getReadabledatabase并没有任何意义,因为它只能用于读取值。
根据您的应用程序要求,您可以判断使用情况。如果您只是不断阅读这些值,那么您可以选择getreadabledatabase。
注意:有时当您尝试使用getwritabledatabase打开数据库时,如果系统发现类似写入权限的异常,那么系统可能会抛出异常。在这种情况下,您可以使用getreadabledatabase打开数据库。
答案 3 :(得分:0)
如果在实现并发(多线程)db调用时遇到'数据库已锁定'类型错误,请使用getWritableDatabase而不是getReadableDatabase。
答案 4 :(得分:-2)
以只读方式打开数据库应略微提高性能,因为锁定开销会降低。