如果表中不存在
如果
我正在使用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)
并且成功了