Android комната вставка с запросом - PullRequest
0 голосов
/ 20 сентября 2018

Я знаю, что вставить данные в библиотеку комнаты SQlite можно с помощью аннотации @Insert, но я (из любопытства) попытался вставить значения с помощью оператора SQL, но Android-студия показала, что при указании имен столбцов можно 'не будет решено.Это способ заставить разработчика использовать аннотацию @Insert или я здесь что-то не так делаю?Спасибо!

Пожалуйста, просмотрите следующий скриншот - enter image description here

Ответы [ 3 ]

0 голосов
/ 16 мая 2019

То, что я делаю, вызывает getOpenHelper().getWritableDatabase() на RoomDatabase.

Тогда вы получаете SupportSQLiteDatabase object, который, по сути, не относится к комнате.

С этого момента вы можете вызвать execSQL() или использовать insert() с именем таблицы и ContentValues ​​.

0 голосов
/ 13 августа 2019
@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)
0 голосов
/ 20 сентября 2018

Если вы опускаете список столбцов, который подсвечивается, и, таким образом, предоставляете значения для всех столбцов, например: -

@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

Так что, возможно, лучше раньше, чем позже.

...