如何在房间数据库中实现SQLite查询?



这是我要在房间数据库中使用的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
)

最新更新