如何解决Android Room @insert,如何在创建数据库时插入带有列填充的行
如果您传递单个 id 值,那么一切正常就不会出现错误。我通过当剩下的值为wordEn、wordRu时,输出错误: 没有为参数“wordEn”传递值 没有为参数“wordRu”传递值 如何在填充了列的数据库中插入一行? 看看哪里
@Dao
interface WordDao {
@Insert(onConflict = OnConflictStrategy.IGNORE)
suspend fun insert(id: Word,wordEn: Word,wordRu: Word)
}
@Entity(tableName = "word_table")
data class Word (
@PrimaryKey
var id: Int,var wordEn: String,var wordRu: List<String>
)
@Database(entities = [Word::class],version = 1,exportSchema = false)
abstract class AppRoomDatabase : RoomDatabase() {
....
....
val instance = Room.databaseBuilder(
context.applicationContext,AppRoomDatabase::class.java,"app_room_database"
)
.addCallback(WordDatabaseCallback(scope))
.build()
INSTANCE = instance
instance
}
}
private class WordDatabaseCallback(
private val scope: CoroutineScope
) : RoomDatabase.Callback() {
override fun onOpen(db: SupportSQLiteDatabase) {
super.onOpen(db)
INSTANCE?.let { database ->
scope.launch(Dispatchers.IO) {
populateDatabase(database.wordDao())
}
}
}
}
suspend fun populateDatabase(wordDao: WordDao) {
//TEST Fill the database with random string
....
....
var randomInt: Int = randomInt()
var randomString: String = randomString()
var list: List<String> = list()
wordDao.insert(Word(randomInt,"$a _$randomString",list)) <- !!!
}
//TEST end
}
解决方法
插入语句不正确
@Dao
interface WordDao {
@Insert(onConflict = OnConflictStrategy.IGNORE)
suspend fun insertWord(word: Word)
@Insert(onConflict = OnConflictStrategy.IGNORE)
suspend fun insertWords(words: List<Word>)
@Insert(onConflict = OnConflictStrategy.IGNORE)
suspend fun insertWords1(varargs words: Word)
}
由于 Word
是 entity
@Entity(tableName = "word_table")
data class Word (
@PrimaryKey
var id: Int,var wordEn: String,var wordRu: List<String>
)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。