【发布时间】:2018-09-20 10:26:25
【问题描述】:
我知道可以通过@Insert 注释将数据插入 SQlite 房间库,但我(出于好奇)尝试通过 SQL 语句插入值,但 Android Studio 显示错误,说明列名可以不能解决。这是强制开发人员使用@Insert 注释的一种方式,还是我在这里做错了什么?谢谢!
【问题讨论】:
标签: android sqlite android-sqlite android-room
我知道可以通过@Insert 注释将数据插入 SQlite 房间库,但我(出于好奇)尝试通过 SQL 语句插入值,但 Android Studio 显示错误,说明列名可以不能解决。这是强制开发人员使用@Insert 注释的一种方式,还是我在这里做错了什么?谢谢!
【问题讨论】:
标签: android sqlite android-sqlite android-room
如果您省略突出显示的列列表,从而为所有列提供值,例如:-
@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
所以也许早晚更好。
【讨论】:
@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)
【讨论】:
我正在做的是在 RoomDatabase 上致电 getOpenHelper().getWritableDatabase()。
然后你会得到SupportSQLiteDatabase object,这本质上是非房间方式。
从中您可以调用execSQL() 或使用insert() 与表名和ContentValues。
【讨论】: