美文网首页
手把手教你用ManagedSQLiteOpenHelper实现数

手把手教你用ManagedSQLiteOpenHelper实现数

作者: 吃啥呀 | 来源:发表于2018-10-17 00:04 被阅读94次

    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具体使用

    相关文章

      网友评论

          本文标题:手把手教你用ManagedSQLiteOpenHelper实现数

          本文链接:https://www.haomeiwen.com/subject/obafzftx.html