android代码打开数据库,Android打开和关闭数据库
與計算機(jī)編程中的許多事情一樣,關(guān)閉SQLite數(shù)據(jù)庫的時間沒有單一的“正確進(jìn)行”(如果您正在使用它,則通過SQLiteOpenHelper上的close(),否則對SQLiteDatabase執(zhí)行close()).
一個相當(dāng)硬的規(guī)則是不要同時跨多個線程為同一個數(shù)據(jù)庫使用多個SQLiteDatabase對象.這可能會讓你遇到麻煩,除非你正在進(jìn)行自己的線程同步.如果您堅持每個數(shù)據(jù)庫使用一個SQLiteDatabase對象,則在SQLiteDatabase中處理線程同步.
由于one-database-for-all-threads規(guī)則,并且因為在許多不同的組件中跟蹤何時線程可能或可能不想要數(shù)據(jù)庫可能會很棘手,一些開發(fā)人員采用單一數(shù)據(jù)庫管理器的方法,懶惰打開數(shù)據(jù)庫……永遠(yuǎn)不會關(guān)閉它.例如,數(shù)據(jù)庫支持的ContentProvider使用此模式,因為ContentProvider永遠(yuǎn)不會被銷毀,因此沒有明確的時間關(guān)閉數(shù)據(jù)庫.
就個人而言,我會通過開放式使用 – 關(guān)閉方法走這條路線,特別是如果你使用SQLCipher for Android(加密的SQLite替代品).但是,如果您確定一次只有一個線程可以使用數(shù)據(jù)庫,那么open-use-close方法沒有什么特別的錯誤.
如果只有一個組件使用數(shù)據(jù)庫,則觸發(fā)在onCreate()中打開數(shù)據(jù)庫并在onDestroy()中關(guān)閉它沒有任何問題.畢竟,如果這是唯一需要數(shù)據(jù)庫的組件,那么當(dāng)組件本身消失時,您不需要數(shù)據(jù)庫.
Close your db in onDestroy() Comments: “OnDestroy() does not get called always! Use onStop()!” –> So onStart() has to open it.
如果未在組件上調(diào)用onDestroy(),則表明您在該組件中遇到未處理的異常,或者您的進(jìn)程已終止.后一種情況不是問題(同樣,這是ContentProvider的工作方式,因為提供程序永遠(yuǎn)不會被銷毀).前一種情況應(yīng)該不是問題,只要您不會在多個線程中意外地同時使用舊的SQLiteDatabase和一些較新的SQLiteDatabase.
The db works efficiently. No need to close it.
這不是效率問題. SQLite是事務(wù)性的.無法關(guān)閉數(shù)據(jù)庫不是問題,因為沒有未刷新的緩沖區(qū)或您必須擔(dān)心的事情.
Open your db once and create a field and an accessor.
這與關(guān)閉數(shù)據(jù)庫時沒有任何關(guān)系.
Close after use.
這是一種模式,并且正確完成它可以工作.
總結(jié)
以上是生活随笔為你收集整理的android代码打开数据库,Android打开和关闭数据库的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 鸿蒙系统能否推广,鸿蒙系统凭实力占市场,
- 下一篇: android app 移植到pc,微软