除了 Sharepreference可儲存資料,在 Android 系統有內建「SQLite」資料庫,它是一個開放的小型資料庫,來寫一個簡易的書籍管理,練習如何應用 SQLite 資料庫的基本功能。
簡單來說,要建立一個資料庫,資料庫表格有書名和價格兩個欄位,利用四個 Icon 按鈕分別對應四項功能,為「新增、修改、刪除及查詢」等等,全是資料庫最基本的功能,而儲存的內容則會顯示在螢幕下半部的 ListView。
要做的東西有:
首先要創建資料庫(Database)及放資料的表格(Table)
四個參數
SQLiteOpenHelpter 後面會帶四個參數及兩個方法,參數為 context、name、CursorFactory 及 version
class MyDBHelper (context: Context) :
SQLiteOpenHelper(context, name, CursorFactory, version) {}
可以在下方定義 name 及 version,了解 companion object 用法請點選這裡,當然也可直接寫在參數裡
class MyDBHelper (context: Context) :
SQLiteOpenHelper(context, name, CursorFactory, version) {
companion object {
// 資料庫名稱
val name = "mdatabase.db"
// 資料庫版本,資料結構改變的時候要更改這個數字,通常是加一
val version = 1
}
}
onCreate
裡,建立應用程式需要的表格onUpgrade
裡,刪除原有的表格、並呼叫 onCreate
建立新表格 override fun onCreate(db: SQLiteDatabase) {}
override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) {}
SQL 指令: CREATE TABLE
建立資料庫表格,使用SQL的「CREATE TABLE」指令,需要指定表格的名稱及表格用來儲存每一筆資料的欄位(Column),不過 SQLite 資料庫的資料型態只有下面幾種,使用它們來決定表格欄位可以儲存的資料型態:
INTEGER | REAL | TEXT |
---|---|---|
整數,對應Byte、Short、Int 和Long | 對應Float和Double | 字串,對應String |
建立表格及欄位資料型態,搜尋名為 myTABLE 的資料庫,如果沒有則創建一個,而在 myTABLE 中定義欄位及資料類型,例如這個書籍系統就定義了「book text PRIMARY KEY」和「price integer NOT NULL」兩個欄位,書寫形式為「資料名稱、資料型態、額外指令
」
override fun onCreate(db: SQLiteDatabase) { //資料名稱、資料型態、額外指令
val sql = "CREATE TABLE if not exists myTABL(id integer PRIMARY KEY AUTOINCREMENT, book text NOT NULL, price integer NOT NULL)"
db.execSQL(sql)
}
override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) {}
SQL 指令: DROP TABLE
實作此方法來刪除、建立表格或執行任何需要新版本表格的操作,在這裡我們會下刪除舊資料的指令,並且在刪除後再呼叫onCreate建立新的資料表
class MyDBHelper (context: Context) :
SQLiteOpenHelper(context, name, null, version) {
//建置資料庫的前置動作
override fun onCreate(db: SQLiteDatabase) {
val sql = "CREATE TABLE if not exists myTABLE(book text PRIMARY KEY, price integer NOT NULL)"
db.execSQL(sql)
}
//刪除及更新表格動作
override fun onUpgrade(db: SQLiteDatabase, oldversion: Int, newVersion: Int) {
db.execSQL("DROP TABLE IF EXISTS myTABLE")
onCreate(db)
}
companion object {
val name = "mdatabase.db"
val version = 1
}
}
今天講了如何設定 SQLiteOpenHelper 類別,明天就會用上它囉~