带查询的Android房间插入
我知道可以通过带查询的Android房间插入,android,sqlite,android-sqlite,android-room,Android,Sqlite,Android Sqlite,Android Room,我知道可以通过@Insert注释将数据插入SQlite room库,但我(出于好奇)尝试通过SQL语句插入值,但Android studio向我显示无法解决列名错误。这是强迫开发人员使用@Insert注释的一种方式,还是我在这里做错了什么?谢谢 请查看以下截图- 如果忽略突出显示的列列表,从而为所有列提供值,例如:- @Query("INSERT INTO TestTable VALUES(null,:a,:b)") List<TestTable> getall(String a,
@Insert
注释将数据插入SQlite room库,但我(出于好奇)尝试通过SQL语句插入值,但Android studio向我显示无法解决列名错误。这是强迫开发人员使用@Insert
注释的一种方式,还是我在这里做错了什么?谢谢
请查看以下截图-
如果忽略突出显示的列列表,从而为所有列提供值,例如:-
@Query("INSERT INTO TestTable VALUES(null,:a,:b)")
List<TestTable> getall(String a, String b, String columna, String columnb);
因此,也许早一点总比晚一点好。我现在做的是在
RoomDatabase
上调用getOpenHelper().getWritableDatabase()
然后得到SupportSQLiteDatabase对象
,这基本上是一种非房间方式
从中,您可以调用execSQL()
,或者将insert()
与表名和ContentValues一起使用
@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)
数据类模块空间(
@PrimaryKey(自动生成=false)
变量id:Int=0,
var-nav:String=“”,
变量名称:String=“”,
var imageurl:String=“”
)
对于列表对象
@插入(onConflict=OnConflictStrategy.REPLACE)
有趣的员工(模块:列表)
对于单个对象
@插入(onConflict=OnConflictStrategy.REPLACE)
趣味储蓄员工(模块:ModulesRoom)
乌萨格
val mModules=Modules()
mModules.id=值
mModules.nav=值
saveEmployees(多模块)
谢谢你的回答@MikeT。但是,如果我根据用户的年龄(假设我在表“user”中有“age”列)或时间戳(如果我插入的时间在时间戳之后,则通过其他查询计算)有条件地插入用户,该怎么办。我的意思是,复杂的查询可能需要引用列名。如果在值数据之后使用,我希望它不会在列名中显示错误。有什么想法吗?再次感谢@DevBoy真的没有任何想法,我个人更喜欢老的无房方式。因此,只有偶尔涉猎ROOM(从资产中复制DB,所以有一个ROOM打开的项目,因此我尝试了上面的方法)。我将试图找到一个复杂案件的答案。也许我会发布一个单独的问题与适当的例子。现在我接受你的回答。干杯我只想插入一列记录,你能告诉我如何在房间里这样做吗?我正在这样做,但是@Query(“插入到设置表(KEY\u ID)值('0'))不起作用。我今天刚刚尝试了它,它对我有效。安卓房间2.25版。如果您有主键,请在的insert查询语句中使用null
@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)