我如何在Room数据库中进行这个查询?
@Query("INSERT OR IGNORE INTO ChapterInfo (chapterId, readDate) VALUES (:chapterId, :readDate) UPDATE ChapterInfo SET readDate = :readDate WHERE chapterId = :chapterId")
void insertReadChapterDate(long chapterId, Date readDate);
当我试着做的时候,我得到了错误。"有一个问题与查询。[SQLITE_ERROR] SQL错误或数据库丢失(靠近 "UPDATE":语法错误)" ?
你有什么想法,我可以插入值到表中,但如果记录与此ID存在 - 更新它?
也许通常的插入房间的方式可以做到?
在你的Dao中。
@Insert(onConflict = OnConflictStrategy.REPLACE)
void insert(ChapterInfo chapterInfo)
调用你的DAO方法 你的put对象(new052020)
很明显,这个问题是关于:如何在DB中设置一些值,包括场景。
@Query("INSERT OR REPLACE INTO ChapterInfo ('chapterId', 'readDate') VALUES (:chapterId, :readDate)
void insertReadChapterDate(long chapterId, Date readDate);
在DB中没有主键的记录,那么函数应该添加新的记录,设置给定的值,而行中的其他列应该不初始化。那么函数应该添加新的记录,设置给定的值,其余的列应该不初始化。
. 有一行有这样的主键,那么函数应该只更新给定的值,其余的列--保持不变。
@Query("INSERT OR IGNORE INTO ChapterInfo (chapterId, readDate) VALUES (:chapterId, :readDate)
void insertOrIgnoreChapterDate(long chapterId, Date readDate);
@Query("UPDATE ChapterInfo SET readDate = :readDate WHERE chapterId = :chapterId)"
void updateChapterDate(long chapterId, Date readDate);
@Transaction
void insertUpdateChapterDate(long chapterId, Date readDate){
insertOrIgnoreChapterDate(long chapterId, Date readDate);
updateChapterDate(long chapterId, Date readDate);
}