SQLiteDatabase.openDatabase(...) 与 getWritableDatabase

Posted

技术标签:

【中文标题】SQLiteDatabase.openDatabase(...) 与 getWritableDatabase【英文标题】:SQLiteDatabase.openDatabase(...) vs getWritableDatabase 【发布时间】:2013-05-04 11:23:03 【问题描述】:

我在资产文件夹中将一个数据库与我的应用程序捆绑在一起。 在第一个活动中,我将数据库完美复制到正确的位置(这里没问题)。

我的问题;是不是更好用 openDatabase(字符串路径,SQLiteDatabase.CursorFactory 工厂,int 标志) 还是使用 SQLiteOpenHelper 类的 getWritableDatabase 方法?

哪个更有效率? 我习惯使用getWritableDatabase方法,它需要传递Context,但我只是觉得我可以不用它,因为我不需要SQliteOpenHelper的onUpgrade或onCreate函数。

【问题讨论】:

【参考方案1】:

getWritableDatabase只是SQLiteOpenHelper的开库方式。

如果你不需要SQLiteOpenHelper,你也不需要打电话给getWritableDatabase

【讨论】:

如果我使用 SQliteDatabase.openDatabase() 如何在 Activity 生命周期中优化它?例如,在 onPause 期间释放资源。使用 db.close() 是否安全(其中 db 是我的 SQLiteDatabase 对象)谢谢 这是一个不同的问题。并优化什么?速度?记忆?可维护性? 我认为在 onPause() 期间始终关闭所有打开的数据库以释放内存是一个好习惯,SQLiteOpenHelper close() 方法非常适合,在 onResume() 期间 open() 是完美的。但是使用 SQLiteDatabase.openDatabase(),我找不到合适的方法来释放内存或在离开 Activity 时断开数据库。 SQLiteDatabase 派生自 SQLiteClosable,后者具有 close method。 感谢@CL,我选择了 openDatabase() 方法,它按预期工作。

以上是关于SQLiteDatabase.openDatabase(...) 与 getWritableDatabase的主要内容,如果未能解决你的问题,请参考以下文章