iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 28
0
自我挑戰組

Kotlin Everyday:新手寫程式踩的坑系列 第 28

Day 28 ─用 Kotlin 做書籍檢索 SQLite 資料庫(上)

除了 Sharepreference可儲存資料,在 Android 系統有內建「SQLite」資料庫,它是一個開放的小型資料庫,來寫一個簡易的書籍管理,練習如何應用 SQLite 資料庫的基本功能。
簡單來說,要建立一個資料庫,資料庫表格有書名價格兩個欄位,利用四個 Icon 按鈕分別對應四項功能,為「新增、修改、刪除及查詢」等等,全是資料庫最基本的功能,而儲存的內容則會顯示在螢幕下半部的 ListView。

要做的東西有:

  • 兩個 EditText 讓使用者可輸入書名和價格
  • 放搜尋、新增、修改、刪除等功能鍵
  • 儲存在資料庫,重啟 APP 仍會保留數據
  • 點選功能鍵後,ListView 也會更新畫面

實作 SQLite 小型資料庫

首先要創建資料庫(Database)及放資料的表格(Table)

  1. 新增 New -> Kotlin File/Class 創建一個空白的類別檔,命名為 MyDBHelper,繼承 SQLiteOpenHelpter

SQLiteOpenHelpter

四個參數
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
        }
    }
  1. 至於兩個要實作的方法則是 onCreate() 和 onUpgrade()
  • onCreate 裡,建立應用程式需要的表格
  • onUpgrade 裡,刪除原有的表格、並呼叫 onCreate 建立新表格
   override fun onCreate(db: SQLiteDatabase) {}
   override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) {}

onCreate()

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」兩個欄位,書寫形式為「資料名稱、資料型態、額外指令

  • NOT NULL ---不允許空值,以免資料出問題
  • PRIMARY KEY ---資料編號
  • 創建了 id、book、price 三個欄位,型態分別為 integer、text、integer
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)
}

onUpgrade

   override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) {}

SQL 指令: DROP TABLE
實作此方法來刪除、建立表格或執行任何需要新版本表格的操作,在這裡我們會下刪除舊資料的指令,並且在刪除後再呼叫onCreate建立新的資料表

  • DROP TABLE if exists + 表格名稱(刪除資料表)
  • 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 類別,明天就會用上它囉~


上一篇
Day 27 ─如何修改 Application Icon
下一篇
Day 29 ─用 Kotlin 做書籍檢索 SQLite 資料庫(下)
系列文
Kotlin Everyday:新手寫程式踩的坑30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言