簡體   English   中英

如何在 Android 房間數據庫中創建新記錄?

[英]How do I create a new record in Android Room database?

這似乎是一個懶惰的問題,但官方文檔確實沒有解釋如何做到這一點。

https://developer.android.com/training/data-storage/room

我有一個這樣的實體:

@Entity
data class Shader(
    @PrimaryKey(autoGenerate = true) val uid: Int,
    val name: String,
    val shaderMainText: String,
    val paramsJson: String?
)

還有我的Dao上的一些方法:

    @Insert
    fun insertAll(vararg shaders: Shader)

    @Delete
    fun delete(shader: Shader)

    @Update
    fun update(shader: Shader)

如何制作新記錄並插入?

我已經做到了這一點:

val record = Shader(name="Foo", shaderMainText="bar", paramsJson=null)

但它抱怨說我遺漏了參數uid 為什么我需要提供一個uid 應該是自動生成的吧?

創建新記錄的示例將不勝感激。

您可以將uid字段的默認值設置為0

@Entity
data class Shader(
    @PrimaryKey(autoGenerate = true) val uid: Int = 0,
    val name: String,
    val shaderMainText: String,
    val paramsJson: String?
)

autoGeneratetrue時,Room 會忽略默認值,因此它會創建自動遞增的值。 最后,這不會給你一個編譯錯誤:

val record = Shader(name="Foo", shaderMainText="bar", paramsJson=null)

文檔說:

如果字段類型為 long 或 int(或其 TypeConverter 將其轉換為 long 或 int),則插入方法在插入項目時將 0 視為未設置。

如果字段的類型是 Integer 或 Long(或其 TypeConverter 將其轉換為 Integer 或 Long),則插入方法在插入項目時將 null 視為未設置。

所以我會嘗試將要初始化的 uid 設置為 0 或使其可為空並設置為 null。

希望有幫助!

https://developer.android.com/reference/android/arch/persistence/room/PrimaryKey#autoGenerate()

你也可以這樣試試

最佳做法是始終創建一個instance Class

  • 1st 創建一個數據庫實例 class

     @Database(entities = [Shader::class], version = 1) abstract class DatabaseHelper: RoomDatabase() { companion object { private var instance: DatabaseHelper? = null fun getInstance(context: Context?): DatabaseHelper? { if (instance == null) { synchronized(DatabaseHelper::class) { if (context.= null) { instance = Room.databaseBuilder(context,applicationContext: DatabaseHelper:.class,java. "database.db").allowMainThreadQueries():build() } } } return instance } } abstract fun getDao()? DBDao? }
  • 像下面這樣創建你的Shader data class

     @Entity(tableName = "shader") data class Shader( @PrimaryKey(autoGenerate = true) var id: Int?, val name: String, val shaderMainText: String, val paramsJson: String? ) { constructor(name: String, shaderMainText: String, paramsJson: String?): this( null, name, shaderMainText, paramsJson ) }

    在這里你要創建constructor

  • Shader中添加數據, insertAll如下

     val record = Shader(name="Foo", shaderMainText="bar", paramsJson=null) DatabaseHelper.getInstance(this)?.getDao()?.insertAll(record)

並且您的數據添加成功

在此處輸入圖像描述

在數據庫中插入數據時,應該始終有一個 @PrimaryKey(autoGenerate = false)

暫無
暫無

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

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