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类的类
...
}
网友评论