Android Sqlite數據庫升級——kotlin
標簽: SqliteOpenHelper kotlin android數據庫升級 onUpgrade
??對于android開發同學來說,數據庫相關操作是我們日常操作之一,相應的數據庫的升級操作就必不可少了。這里我總結下數據庫升級時需要注意的事項。
Android中數據庫操作的核心類是SqliteOpenHelper,這個類有兩個方法,onCreate和onUpgrade。onCreate方法只會調用一次,onUpgrade方法會在版本號增加之后觸發。
數據庫升級的操作過程中,我們需要處理的情況有兩種,第一種是數據庫從低版本升級上來的,第二種是新安裝app的用戶。
每次數據庫需要升級時,我們需要將新版本的修改同步到兩個地方:
一個是onCreate方法中,這里確保新安裝app的用戶可以使用到最新的數據庫,所以這里創建數據庫的語句應該是可以直接創建最新版本數據庫的語句。
另一個是onUpgrade方法中,在這里我們需要確保低版本用戶在升級到最新版時,能夠將數據庫更新到最新,這里我們就需要將各個版本間的差異用代碼體現出來。
代碼如下:
// 表的名字
const val sqlite_name = "MySqliteHelper.db"
internal class MySqliteHelper(context: Context, version: Int) : SQLiteOpenHelper(context, sqlite_name, null, version) {
val TAG = "MySqliteHelper"
// 創建語句
val sqlCreate = "create table Test (" +
"id integer primary key autoincrement, " +
"author text, " +
"price real, " +
"pages integer, " +
"name text, " +
"ver2 text, " +
"ver3 text, " +
"ver4 text, " +
"ver5 text)"
override fun onCreate(db: SQLiteDatabase?) {
Log.e(TAG, "onCreate")
db?.execSQL(sqlCreate)
}
override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) {
Log.e(TAG, "onUpgrade oldVersion:$oldVersion newVersion:$newVersion")
// 1 升級到 2
if (oldVersion < 2) {
Log.e(TAG, "onUpgrade 1~2")
}
// 2 升級到 3
if (oldVersion < 3) {
Log.e(TAG, "onUpgrade 2~3")
}
// 3 升級到 4
if (oldVersion < 4) {
Log.e(TAG, "onUpgrade 3~4")
}
// 4 升級到 5
if (oldVersion < 5) {
Log.e(TAG, "onUpgrade 4~5")
}
}
}
2、使用SqliteOpenHelper的子類創建數據庫:
class SqliteUpgradeActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_sqlite_upgrade)
var sqliteHelper = MySqliteHelper(this, 1);
var db = sqliteHelper.writableDatabase
db.execSQL("insert into Test (name, author, pages, price) values(?, ?, ?, ?)",
arrayOf("tiny's book", "tiny", "600", "20.9"))
db.execSQL("insert into Test (name, author, pages, price) values(?, ?, ?, ?)",
arrayOf("tongtong", "tong", "250", "9.99"))
}
}
3、這里我們先設置數據庫的版本為1,然后看下執行結果:
log中有如下輸出:表明我們的數據庫創建好了。
E/MySqliteHelper: onCreate
然后我們查看下創建好的數據庫,如下所示,可以看到數據庫中的數據字段確實如我們期望的那樣。
5、修改版本號,模擬從低版本升級到高版本:
這里我們直接將version字段的值修改為5,代表著用戶是從第1版數據庫的app直接升級到第5版的數據庫。這種情況下,onUpgrade方法中的所有代碼都會順序執行,我們運行代碼驗證下:
E/MySqliteHelper: onUpgrade oldVersion:1 newVersion:5
onUpgrade 1~2
onUpgrade 2~3
onUpgrade 3~4
onUpgrade 4~5
可以看到,輸出的Log跟我們期望的完全相同。
總結:
使用SqliteOpenHelper進行數據庫升級操作時,onCreate方法中需要時刻保持最新的業務語句,因為這個方法只有新安裝的用戶才會執行。另外,在onUpgrade方法中,需要保留每次升級時新版本與上版本的差異。
智能推薦
Android Studio查看SQLite數據庫
Android Debug Database 這是一個開源的項目(免費),項目地址在這。 先在 module 的 build.gradle 里面添加: 讓手機和電腦處于一個局域網下,當項目跑起來的時候,在 logcat 里面會打印出這么一行: 把地址復制到瀏覽器,就會看到一個這樣的界面: 很容易理解,里面幾個欄目分別是: Query:寫 SQL 語句的地方 Databases:數據庫 Tables...
Android之SQLite數據庫實例
摘自《Android應用程序開發(第三版)》王向輝、張國印、沈潔編著 1、創建DBAdapter類,用于進行數據庫的操作,具體代碼如下: 2、創建People類,具體代碼如下: 3、在主Activity中(一般是MainActivity,這里是SQLiteDemoActivity),代碼如下: 4、activity_main.xml的具體代碼如下: 5、測試效果: (1)頁面顯示 (2)添加一條數...
Android SQlite數據庫使用詳解
目錄 概述 SQLite使用 SQLite數據庫創建 增加數據 刪除數據 更新數據 查詢數據 完整代碼 概述 SQLite 一個非常流行的嵌入式數據庫,它支持 SQL 語言,并且只利用很少的內存就有很好的性能。此外它還是開源的,任何人都可以使用它。 查看模擬器數據庫傳送門:Android Studio查看SQLite數據庫方法大全 SQLite使用 SQLite數據庫創建 Android提供了一個...
Android——SQLite數據庫(簡單操作)
本篇文章源碼:https://github.com/1079374315/HibernateDome 超級簡單的SQLite使用如:(不需要寫任何SQL語句完成以下操作) 1.創建數據庫 1 行代碼 2.添加數據 1 行代碼 3.刪除數據 1 行代碼 4.修改數據 1 行代碼 5.查詢數據 1 行代碼 從創建數據庫到數據庫的增刪查改總共 5 行代碼。 先看效果圖: 如果有興趣咋們跟著小...
Android SQLite數據庫使用
SQLite是一種輕量級的數據庫,存取數據非常快,非常適合移動設備的本地化存取數據。(Android系統中已經內置了SQLite數據庫) 數據庫的創建: SQLiteOpenHelper,該類是Android提供給我們的便于管理數據庫的一個抽象類,里面有兩個主要的抽象方法需要我們在繼承時進行重寫。分別是onCreate():數據庫創建時會調用;onUpgrade():數據庫升級時調用。另外還提供數...
猜你喜歡
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...
電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!
Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...
requests實現全自動PPT模板
http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...