Android中个人推崇的数据库使用方式
手機應用開發中常常會使用到數據庫存儲一些資料或者進行數據緩存,android中為我們提供了一個輕量的數據庫。在上層進行了一層封裝,同一時候還為我們提供了ContentProvider的框架。方便我們進行數據操作。以及在不同的程序之間進行數據共享。
本文介紹一下,我在使用數據庫的一些我覺得比較好的習慣,歡迎與我討論。
關于框架
通常網絡操作。Json解析。我都會使用框架,這樣能夠非常好的幫助我處理異常。處理異步操作。可是數據庫操作我則使用自帶的SQLiteHelper和ContentProvider。這樣android系統在SQLite上為我們提供的一層封裝。因此,我不再使用第三方的SQLite框架。SQLiteDatabase和ContentProvider為我們提供一下函數
| 12345 | query() //查詢insert() //插入delete() //刪除update() //更新//參數和返回值我沒有寫 |
能夠看到。android為我們提供的操作已經被封裝了,非常多地方和別的ORM框架也是有一些類似的。并且在android中我們通常不會存儲非常復雜的數據結構,不是必需給自己學習框架添加成本。
數據庫建庫升級等原則
先看一段代碼
| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 | private final class DatabaseHelper extends SQLiteOpenHelper { public DatabaseHelper(final Context context) { super(context, DB_NAME, null, DB_VERSION);} /*** 1-->2 add header table* 2-->3 update info* 3--> update info haha**/ public static final int DB_VERSION = 4; public static final String DB_NAME = "download"; /*** Creates database the first time we try to open it.*/ @Override public void onCreate(final SQLiteDatabase db) { if (Constants.LOGVV) {Log.v(Constants.TAG, "populating new database");}onUpgrade(db, 0, DB_VERSION);} /*** Updates the database format when a content provider is used* with a database that was created with a different format.** Note: to support downgrades, creating a table should always drop it first if it already* exists.*/ @Override public void onUpgrade(final SQLiteDatabase db, int oldV, final int newV) { for (int version = oldV + 1; version <= newV; version++) {upgradeTo(db, version);}} /*** Upgrade database from (version - 1) to version.*/ private void upgradeTo(SQLiteDatabase db, int version) { switch (version) { case 1:createDownloadsTable(db); break; case 2:createHeadersTable(db); break; case 3:addColumn(db, DB_TABLE, Downloads.Impl.COLUMN_IS_PUBLIC_API, "INTEGER NOT NULL DEFAULT 0");addColumn(db, DB_TABLE, Downloads.Impl.COLUMN_ALLOW_ROAMING, "INTEGER NOT NULL DEFAULT 0");addColumn(db, DB_TABLE, Downloads.Impl.COLUMN_ALLOWED_NETWORK_TYPES, "INTEGER NOT NULL DEFAULT 0"); break; case 103:addColumn(db, DB_TABLE, Downloads.Impl.COLUMN_IS_VISIBLE_IN_DOWNLOADS_UI, "INTEGER NOT NULL DEFAULT 1");makeCacheDownloadsInvisible(db); break; case 4:addColumn(db, DB_TABLE, Downloads.Impl.COLUMN_BYPASS_RECOMMENDED_SIZE_LIMIT, "INTEGER NOT NULL DEFAULT 0"); break; default: throw new IllegalStateException("Don't know how to upgrade to " + version);}} |
以上代碼是摘自android 中的DownloadProvider的DatabaseHelper代碼。我在這里主要是像推薦這樣的數據庫的建表,最初接觸這樣的建表方式是在曾經閱讀DownloadManager的時候發現,發現android中這樣的設計真的是很精妙。這樣的方式。方便數據庫的升級,在update數據庫和create數據庫的時候。能夠共用建表,改動數據表的代碼,同一時候能夠清晰看到數據庫的變化。
同一時候建議,在改動數據庫版本號的時候。在版本號號上面添加凝視。寫上數據庫升級的內容,方便自己以后看到數據庫的變化。以及其它人在看代碼時候。了解到數據庫的變化。
數據庫建表和數據存儲建議
一些簡單的配置文件,不建議存到數據庫,存到sharepreference中。方便存取,同一時候也提高訪問速度。
文件。圖片等絕對不要存到數據庫,存儲文件路徑到數據庫中就可以。
一些非常復雜的數據,建議直接轉成json存到數據庫就可以。
一些緩存也能夠這樣存儲。
其它要說的
數據庫操作時候,不要在主線程操作。這是耗時操作,easy造成ANR.
在進行數據庫中的數據顯示時候。建議配合CursorLoader使用。這是android提供的異步數據載入。同一時候會在數據變化時候,自己主動又一次刷新數據。
其它。本文。本人亂扯。
如有你有異議,歡迎回復討論。
原文地址:http://blog.isming.me/2014/10/13/good-database-use/,轉載請注明出處。
總結
以上是生活随笔為你收集整理的Android中个人推崇的数据库使用方式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: prototype原型模式
- 下一篇: 快速操作Linux终端命令行的快捷键…