手把手教你用ManagedSQLiteOpenHelper實現資料庫

weixin_33912246發表於2018-10-17

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

相關文章