在 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 连接的主要内容,如果未能解决你的问题,请参考以下文章