Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带查询的Android房间插入_Android_Sqlite_Android Sqlite_Android Room - Fatal编程技术网

带查询的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)