手把手教你用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.使用
相關文章
- 手把手教你用 Go 實現一個 mTLSGoTLS
- 手把手教你用RecyclerView實現貓眼電影選擇效果View
- 手把手教你用Python實踐深度學習Python深度學習
- 手把手教你用Python庫Keras做預測(附程式碼)PythonKeras
- 手把手教你用java實現二分查詢樹及其相關操作Java
- 資料庫連線池實現資料庫
- Redis多機資料庫實現Redis資料庫
- 手把手教你用Python進行迴歸(附程式碼、學習資料)Python
- CAS配置資料庫,實現資料庫使用者認證資料庫
- 手把手教你用redis實現一個簡單的mq訊息佇列(java)RedisMQ佇列Java
- 【“探探”為例】手把手教你用最少的程式碼實現各種“機器人”機器人
- 手把手教你用Charles抓包
- django使用多個資料庫實現Django資料庫
- Mybatis實現分包定義資料庫MyBatis資料庫
- 資料庫實現原理#4(Hash Join)資料庫
- Redis 設計與實現:資料庫Redis資料庫
- golang實現mysql資料庫備份GolangMySql資料庫
- 實現MySQL資料庫的實時備份MySql資料庫
- laravel實現100w大量資料插入資料庫Laravel資料庫
- 手把手教你用Python的Prophet庫進行時間序列預測Python
- Web資料視覺化-手把手教你實現熱力圖Web視覺化
- MongoDB資料庫手把手教你來學習MongoDB資料庫
- 《redis設計與實現》2-資料庫實現篇Redis資料庫
- 教你用一條SQL搞定跨資料庫查詢難題SQL資料庫
- Excel資料庫轉MySQL,實現查詢Excel資料庫MySql
- 資料庫向量化入門與實現資料庫
- mysql資料庫實現主從複製MySql資料庫
- 實現報表資料分庫儲存
- 資料庫實現原理#1(Nested Loop Join)資料庫OOP
- 資料庫實現原理#3(Merge Join).md資料庫
- 【JDBC的實現步驟……MySQL資料庫】JDBCMySql資料庫
- Redis 資料庫、鍵過期的實現Redis資料庫
- 讓業務實現迴歸資料庫資料庫
- Redis中單機資料庫的實現Redis資料庫
- mybatis怎麼實現insert into多個資料-oracle資料庫MyBatisOracle資料庫
- 資料庫系列——基於Canal實現MySQL增量資料同步資料庫MySql
- 今日談:BoltDB資料庫,一款純Go實現的KV資料庫資料庫Go
- 教你用Perl實現Smgp協議協議