iT邦幫忙

2021 iThome 鐵人賽

DAY 27
0
自我挑戰組

社畜轉行之旅,30天Kotlin學習筆記系列 第 27

Day 27 | SQLite資料庫(二)

資料庫結構與設計

//建立資料表
CREATE TABLE myTable()

表格名稱後的括號內,要定義該表格的資料欄位,每個資料表可擁有數個欄位,SQLite資料庫的資料型態有下列三種:

  • INTEGER:對應byte、short、int、long
  • REAL:對應float、double
  • TEXT:對應String
//定義資料欄位語法,前者為欄位名稱;後者為資料型態
TITLE INTEGER

//若增加NOT NULL則表示該欄位不允許空值
TITLE INTEGER NOT NULL

//主鍵
TITLE TEXT PRIMARY KEY

//綜合上述語法,建立一個名為myTable的資料表,內有book與price兩個值,分別儲存文字與數字,其中book為主鍵,而price不為空
CREATE TABLE myTable(book TEXT PRIMARY KEY, price INTEGER NOT NULL)

寫在MyDBHelper的onCreate()中,使用execSQL()將以上SQL語法作為字串傳入,讓DB產生table

override fun onCreate(db: SQLiteDatabase) {
        //這裡寫要加入建立資料表的SQL語法
        db.execSQL("CREATE TABLE myTable(book TEXT PRIMARY KEY, price INTEGER NOT NULL)")
    }

onCreate()只有在第一次建立資料庫時執行,如果希望更新資料表欄位,則需進行資料庫遷移(Migration),遷移有三步驟,如下所述:

  1. 將資料庫版本升級

    //升級資料庫版本
    private const val v = 2
    
  2. 在onUpgrade()執行以下語法

    override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
            //當表已存在將其刪除
            db.execSQL("DROP TABLE IF EXISTS myTable")
        }
    
  3. 重新呼叫onCreate()建立新的資料表

    override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
            //當表已存在將其刪除
            db.execSQL("DROP TABLE IF EXISTS myTable")
            //刪除資料表後重新呼叫onCreate()方法建立新的資料表
            onCreate(db)
        }
    

上一篇
Day 26 | SQLite資料庫(一)
下一篇
Day 28 | SQLite資料庫(三)
系列文
社畜轉行之旅,30天Kotlin學習筆記30

尚未有邦友留言

立即登入留言