这是我要在房间数据库中使用的SQLite查询 这是第一个尝试插入数据的方法,如果数据已经存在,则使用 id 更新数据
INSERT INTO books(id, title, author, year_published) VALUES(@id, @title, @author, @year_published)
ON DUPLICATE KEY UPDATE title = @title, author = @author;
Room 支持@RawQuery注释在运行时构造查询。所以你需要:
@Dao
interface BooksDao{
@RawQuery
List<Book> books(SupportSQLiteQuery query);
}
并以老式风格创建查询:
String queryString = "here is your query";
List<Object> args = new ArrayList(); // here is your args for your query
然后执行您的查询:
SimpleSQLiteQuery query = new SimpleSQLiteQuery(queryString, args.toArray());
List<Book> result = booksDao.books(query);
您可以使用OnConflictStrategy.REPLACE来实现这一点。
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insertBooks(vararg books: Book)
并且您必须将idid指定为主键
@Entity(tableName = "book_table")
data class Book(
@PrimaryKey val id: String,
val title: String,
val author: String,
val year_published: Int
)