【问题标题】:Android room inserting with a query使用查询插入 Android 房间
【发布时间】:2018-09-20 10:26:25
【问题描述】:

我知道可以通过@Insert 注释将数据插入 SQlite 房间库,但我(出于好奇)尝试通过 SQL 语句插入值,但 Android Studio 显示错误,说明列名可以不能解决。这是强制开发人员使用@Insert 注释的一种方式,还是我在这里做错了什么?谢谢!

请查看以下屏幕截图 -

【问题讨论】:

    标签: android sqlite android-sqlite android-room


    【解决方案1】:

    如果您省略突出显示的列列表,从而为所有列提供值,例如:-

    @Query("INSERT INTO TestTable VALUES(null,:a,:b)")
    List<TestTable> getall(String a, String b, String columna, String columnb);
    

    Android Studio 没有抱怨,但随后您会收到以下编译器错误:-

    error: INSERT query type is not supported yet. You can use:SELECT, DELETE, UPDATE
    

    所以也许早晚更好。

    【讨论】:

    • 感谢您的回答@MikeT。但是,如果我根据用户的年龄(假设我在表“用户”中有“年龄”列)或时间戳(如果我的插入时间在通过其他查询计算的时间戳之后)有条件地插入用户怎么办。我的意思是复杂的查询可能需要引用列名。如果在 VALUES 数据之后使用,我希望它不会在列名中显示错误。有什么想法吗?再次感谢!
    • @DevBoy 没有任何想法,我个人更喜欢旧的非 ROOM 方式。所以有时只涉足 ROOM(正在玩从资产中复制 DB,所以有一个打开 ROOM 的项目,因此我尝试了上述方法)。
    • 我明白了。我将尝试找到一个复杂案例的答案。也许我会用适当的例子为此发布一个单独的问题。现在我接受你的回答。干杯!
    • 我只想插入一个列记录你能告诉我如何在房间里做到这一点吗?我正在这样做,但它不起作用 @Query("Insert into SETTINGS_TABLE (KEY_ID) values ('0') ")
    • 我今天刚试过,它对我有用。 Android 房间版本 2.25。在你有一个主键的插入查询语句中使用 null
    【解决方案2】:
    @Entity
    data class ModulesRoom(
        @PrimaryKey(autoGenerate = false)
        var id: Int = 0,
        var nav: String = "",
        var name: String = "",
        var imageurl: String = ""
    )
    for List Object
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    fun saveEmployees(modules: List<ModulesRoom>)
    
    for single obbjet
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    fun saveEmployees(modules: ModulesRoom)
    
    Ussage 
    val mModules = Modules() 
    mModules.id = values
    mModules.nav = values 
    saveEmployees(mModules)
    

    【讨论】:

      【解决方案3】:

      我正在做的是在 RoomDatabase 上致电 getOpenHelper().getWritableDatabase()。

      然后你会得到SupportSQLiteDatabase object,这本质上是非房间方式。

      从中您可以调用execSQL() 或使用insert() 与表名和ContentValues。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-09-01
        • 2019-08-29
        • 1970-01-01
        • 2021-06-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多