編輯:關於Android編程
SQLite是Android內置的一個很小的關系型數據庫。SQLiteOpenHelper是一個用來輔助管理數據庫創建和版本升級問題的抽象類。我們可以繼承這個抽象類,實現它的一些方法來對數據庫進行自定義操作。下面兩個方法必須重寫:
另外SQLiteOpenHelper子類在構造實例時必須指定當前數據庫的名稱(name)、版本號(version)。而這裡名稱就決定了數據庫存儲時的文件名稱,而這裡的版本號與App在AndroidMainfest.xml定義的versionCode沒有絕對關聯。也就是在App更新時如果數據庫的數據結構沒有發生變化那麼數據庫的版本號則不用增加。
onCreate:調用時機是用戶首次安裝應用後啟動,或是清除App數據庫文件後啟動。這時可以在這個函數中完成初始的數據表的創建。
onUpgrade:調用時機是用戶在做應用更新,覆蓋安裝後啟動,如果新版本中數據庫版本號要比舊版本中的數據庫版本號高則會調用。這時可以在這個函數完成數據庫版本升級帶來的舊版本的兼容問題,以及數據遷移問題。
還有一個一般情況下不需要重寫,但在應用出現逆向降級(如應用由版本號4降級安裝版本號為3的包)時必須重寫的方法onDowngrade,如果應用降級覆蓋安裝時沒有重寫該方法則會崩潰。
在數據庫版本升級時, 我們可能會遇到這樣一些情況:
而處理上面這些問題都要在不損害舊數據庫歷史數據的前提下完成。這裡我們假設用戶手機上之前安裝的是數據庫版本為1的包,升級安裝的是數據庫版本號為2的包。這時我們要在數據庫版本為2的包在去處理這些升級邏輯。
首先是擴展一個表的字段在onUpgrade中的實現為:
[java] view plain copy
SQLite對ALTER TABLE的支持是有限的,你可以在一個存在表上添加一個字段到末尾,或者是改變表的名稱。但如果你想做更復雜的操作,比如刪除一個表已有的字段,就要重新創建這個表並完成數據遷移,而不能使用DROP COLUMN這樣方便的命令了。詳見SQLite Frequently Questions
比如表pedant原來有三個字段a、b、c,現在想刪除c字段,那麼在onUpgrade中寫法如下:
[java] view plain copy這樣就既完成了對c字段的刪除也保留了原來表上的數據。
最後一種情況最簡單直接執行CREATE語句就要可以了。
[java] view plain copy
// 因為我們無法預知未來版本的表結構,向下兼容時最穩妥的方法就是將該版本自己需要的表重構一次@Overridepublic void onDowngrade (SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("DROP TABLE IF EXISTS t1;"); db.execSQL("DROP TABLE IF EXISTS t2;"); db.execSQL("DROP TABLE IF EXISTS t3;"); db.execSQL("DROP TABLE IF EXISTS t4;"); .... onCreate(db); // 建表}
紅米3S是小米在14號推出的新機,紅米3S配備金屬機身、指紋識別、八核主流配置、長續航等特點,性價比很高。隨著紅米3S開啟預約,不僅之後米粉用戶就可以用上這
前幾天看見開源項目效果好贊,看了下代碼,實現大致就是在原界面之上覆蓋一成自定義的View,獲取到點擊的那個View的內容(Bitmap),然後在覆蓋的那個自定義View的
锲而捨之,朽木不折;锲而不捨,金石可镂。——荀況今天學習了一下Service的用法就和大家一起來討論Android中Service的相關知識點,如
前言 最近項目做用戶登錄模塊需要一個右邊帶圖片的EditText,圖片可以設置點擊效果,所以就查資料做了一個自定義EditText出來,方便以後復用。原理 下面是自定