簡體   English   中英

如何在 Android RoomDB App 中插入后獲取自動生成的 ID

[英]How to get Auto Generated ID after Insert in Android RoomDB App

我正在使用 MVVM 架構構建一個 Android 應用程序。 表 A 有一個自動生成的主鍵列,它是表 B 中的外鍵。當用戶單擊主片段上的按鈕時,會將一行插入表 A。作為此按鈕的 onClickListener 的一部分,我想檢索創建后自動生成的主鍵值 (rowId) 並將其與更多數據一起插入到表 B 的列中。

我正在使用 MVVM 架構、協程等......但無法弄清楚如何做到這一點。 下面是一些代碼,如果有人可以提供幫助,我很樂意發布更多內容。

**// DAO Code**
@Dao
interface WLDAO {

@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insertTableA(tableAEntry: TableAEntry) : Long

**// Repo Code (function only)**
suspend fun insertTableA(tableAEntry: TableAEntry): Long {
    return WLDAO.insertTableA(TableAEntry)
}

**// View Model Code (function only)**
fun addToTableA(tableAEntry: TableAEntry) = viewModelScope.launch {
     repo.insertTableA(TableAEntry)     
}

我想在創建后檢索自動生成的主鍵值 (rowId),並將其與更多數據一起插入表 B 的列中。

Room DAO 的@Insert function 返回的Long是與該INSERT操作關聯的行 ID。

為了在進一步的數據操作中使用該值,請在您的存儲庫或視圖模型中處理該值。 例如,您的存儲庫可能具有以下內容:

suspend fun doStuffWithBothTables(tableAEntry: TableAEntry, stuffForTableB: Whatever): Long {
    val rowID = WLDAO.insertTableA(TableAEntry)

    // TODO use rowID and stuffForTableB for some other DAO operations
}

由於doStuffWithBothTables()本身就是一個suspend fun ,你可以正常調用其他suspend函數,就好像沒有線程或任何涉及的東西一樣。 所以doStuffWithBothTables()可以從第一個插入中獲取行 ID,然后對該結果進行額外的工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM