iT邦幫忙

2022 iThome 鐵人賽

DAY 18
0

開頭

昨天把實體做完後,今天就要來寫 SQL 語法啦

建立 Dao

  1. 我們是用 interface 的形式建立,記得增加@Dao
    @Dao
    interface NoteDatabaseDao {
    
    }
    
  2. 新增資料,使用@Insert
    前面加上 suspend 是因為我們要用常數式來新增資料,
    後面加上 Long 資料形態的話,會回傳新增的這筆資料是在資料庫的第幾項
    onConflict的設定有三種,分別是
    1. OnConflictStrategy.REPLACE:用新資料取代
    2. OnConflictStrategy.ABORT:不做任何事情
    3. OnConflictStrategy.IGNORE:維持舊資料
    @Dao
    interface NoteDatabaseDao {
    
        @Insert(onConflict = OnConflictStrategy.REPLACE)
        suspend fun insert(note: Note): Long
    }
    
  3. 刪除資料,使用@Delete,當然也可以用查詢的方式來寫刪除
    @Dao
    interface NoteDatabaseDao {
    
        @Delete
        suspend fun delete(note: Note)
    }
    
  4. 查詢資料,使用@Query,然後在刮號內寫 SQL 語法,例如查詢資料庫中的所有資料,用陣列的方式回傳
    @Dao
    interface NoteDatabaseDao {
    
        @Query("SELECT * FROM table_name ORDER BY classId DESC")
        suspend fun getAll(): List<Note>
    }
    
  5. 修改資料,使用@Update,當然也可以用查詢的方式來寫修改
    @Dao
    interface NoteDatabaseDao {
    
        @Update
        suspend fun update(note: Note)
    }
    
  6. 所以資料庫的增刪查改寫完後就長這樣
    @Dao
    interface NoteDatabaseDao {
    
        @Insert(onConflict = OnConflictStrategy.REPLACE)
        suspend fun insert(note: Note): Long
    
        @Delete
        suspend fun delete(note: Note
    
        @Query("SELECT * FROM note_table ORDER BY classId DESC")
        suspend fun getAll(): List<Note>
    
        @Update
        suspend fun update(note: Note)
    }
    
  7. 如果要傳值來查詢,使用= :key
    例如查詢一筆特定的資料,所以我們在get後面傳入長整數的key
    然後在@Query的地方使用classId = :key
    這樣就會返回指定的資料
    @Dao
    interface NoteDatabaseDao {
    
        @Query("SELECT * from note_table WHERE classId = :key")
        suspend fun get(key: Long): 你的類?
    }
    

上一篇
111/17 - Room(1/4) - Data class、Entity
下一篇
111/19 - Room(3/4) - Database
系列文
聽說 HackMD 開放 API 串接,那麼用 Kotlin 寫個筆記 App 吧!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言