手把手教你用ManagedSQLiteOpenHelper实现数据库

kotlin Android 搜索历史功能


1.ManagedSQLiteOpenHelper的前世今生

SQLite是Android内置的一个小型、关系型、属于文本型的数据库。
Android中,通过SQLiteOpenHelper类来实现对SQLite数据库的操作(创建、增、修、删)。
过创建子类继承SQLiteOpenHelper类,实现它的一些方法来对数据库进行操作。
在实际开发中,为了能够更好的管理和维护数据库,我们会封装一个继承自SQLiteOpenHelper类的数据库操作类,然后以这个类为基础,再封装我们的业务逻辑方法。
抽象类ManagedSQLiteOpenHelper类继承自SQLiteOpenHelper类

// ManagedSQLiteOpenHelper源码
abstract class ManagedSQLiteOpenHelper(
    ctx: Context,
    name: String?,
    factory: SQLiteDatabase.CursorFactory? = null,
    version: Int = 1
): SQLiteOpenHelper(ctx, name, factory, version) {

    private val counter = AtomicInteger()
    private var db: SQLiteDatabase? = null

    fun <T> use(f: SQLiteDatabase.() -> T): T {
        try {
            return openDatabase().f()
        } finally {
            closeDatabase()
        }
    }

    @Synchronized
    private fun openDatabase(): SQLiteDatabase {
        if (counter.incrementAndGet() == 1) {
            db = writableDatabase
        }
        return db!!
    }

    @Synchronized
    private fun closeDatabase() {
        if (counter.decrementAndGet() == 0) {
            db?.close()
        }
    }
}

当我们使用一个一般的SQLiteOpenHelper,我们需要去调用getReadableDatabase()或者getWritableDatabase(),然后我们可以执行我们的搜索并拿到结果。在这之后,我们不能忘记调用close()。使用ManagedSqliteOpenHelper我们只需要:

forecastDbHelper.use {
//forecastDbHelper类为继承ManagedSQLiteOpenHelper类的类
    ...
}

2.使用

ManagedSQLiteOpenHelper具体使用

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 179,323评论 25 708
  • 用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你...
    hw1212阅读 14,097评论 2 59
  • 我像是那只放不起的风筝 平躺在地上静静等着 我渴望那辽阔的蓝天 及贴天而飞的鸟儿 那般解脱的感觉一直存在心中 可我...
    旧梦雨阅读 474评论 0 0
  • 文|陈瀛Neptune 最近看到一个特别有意思的问题,“如何变得会聊天?”我看到下面的回答数量都上千了,不过我没有...
    陈瀛Neptune阅读 840评论 12 14
  • 舞一舞笔墨 通一通情感 弹一弹泪滴 填一填伤痕
    莎爾德阅读 241评论 0 2

友情链接更多精彩内容