在 Android 中管理 SQLite 连接

Posted

技术标签:

【中文标题】在 Android 中管理 SQLite 连接【英文标题】:Managing SQLite Connections in Android 【发布时间】:2011-07-06 13:56:24 【问题描述】:

我有一个(希望是)关于在 android 中处理 SQLite 数据库连接的快速问题。我有一个应用程序,它自然地由几个活动组成。我创建/更新/查询数据库没有问题,因为我创建了一个专用类来通过 SQLiteOpenHelper 等处理该工作。

我的问题是:由于这些活动都共享同一个数据库,这通常是作为单个静态成员实现的,还是每个活动都应该拥有自己的连接?当然,我关心的是在每个活动中重新连接到数据库的成本。

或者,换句话说,有什么理由不只存储一个单例实例?

我还想知道是否有类似于 .NET 的连接池的幕后发生的事情来降低打开连接的成本。

提前致谢!

【问题讨论】:

【参考方案1】:

SQLite 中的连接打开时间约为 0.2 毫秒。

最佳实践告诉我们每次需要时打开和关闭连接。

【讨论】:

谢谢!有时找到“官方”最佳实践是一项挑战。【参考方案2】:

只需使用SQLiteOpenHelper.getReadableDatabase() 和SQLiteOpenHelper.getWriteableDatabase() - Android 将管理和缓存连接,因此您无需这样做。

其实参考谷歌官方Using Databases文档:

写入和读取 数据库,调用 getWritableDatabase() 和 getReadableDatabase(), 分别。这些都返回一个 SQLite数据库

【讨论】:

感谢@RivieraKid 的回复。官方文件没有详细说明打开连接的费用,这就是我要回答的问题。知道在幕后有一些措施来管理/重用连接,并且在我需要它们时调用这些方法(而不是保留返回的数据库对象)的成本是可以接受的,这非常有帮助。 但是每次调用这些函数时我应该关闭返回的 SQLiteDatabase 吗?我有一个带有很多小函数的 SQLiteDatabase,每个函数都调用一个“getXXXDatabase”。我应该在每个方法结束时关闭数据库吗?我不会失去缓存优势吗?还是 Android 仍然保留它?

以上是关于在 Android 中管理 SQLite 连接的主要内容,如果未能解决你的问题,请参考以下文章

管理 Android SQLite 数据库的工具

如何在android中使用sqlite连接表

跟我学Android之十三 SQLite数据库操作

android怎么连接sqlite数据库?

如何以编程方式从 Android 中删除 SQLite 数据库

Android开发怎么查看和管理sqlite数据库