[英]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.