Dao中的Upsert查询



我正在使用Room开发一个应用程序。操作很简单,如果表中有相同的字母,则letterscore加1,否则加1,letterscore为0。在我的Dao中,我编写了如下查询upsert数据,但是它给出了

复合运算符>, LIMIT, ORDER,需要逗号或分号,get 'ON'

"ON"部分:

@Dao
interface LetterDao {
@Query("INSERT INTO letter_table(letter, letterScore) VALUES (:letter, :letterScore) ON CONFLICT(letter) DO UPDATE SET letterScore = letterScore + 1")
suspend fun insertLetter(letter: String, letterScore: Int)
}

如何修复此错误或如何使用Room进行upsert操作?谢谢你的帮助。

对于不支持UPSERT的SQLite版本,您需要两个单独的语句

首先,尝试更新表:

UPDATE letter_table SET letterScore = letterScore + 1 WHERE letter = :letter

如果表中不存在:letter

,则不会发生任何事情。然后,尝试插入新行:

INSERT OR IGNORE INTO letter_table(letter, letterScore) VALUES (:letter, 0) 

如果:letter已经存在于表中,那么什么也不会发生。

我在我的代码中更改了这部分:

@Query("INSERT INTO letter_table(letter, letterScore) VALUES (:letter, :letterScore) ON CONFLICT(letter) DO UPDATE SET letterScore = letterScore + 1")
suspend fun insertLetter(letter: String, letterScore: Int)

@Query("INSERT OR REPLACE INTO letter_table(letter, letterScore) VALUES (:letter, COALESCE((SELECT letterScore + 1 FROM letter_table WHERE letter=:letter), 0))")
suspend fun insertLetter(letter: String)

并且成功了

相关内容

  • 没有找到相关文章

最新更新