房间:在查询中使用变量

Room: using variable in query

我在我的应用程序中使用 Room DB,我想在查询中将列名作为变量,以便我可以对其进行操作"on the go"(在调用方法时)。

示例代码("name"假设是一个变量代表一列):

@Query("UPDATE Products SET :name = :value WHERE prod_id = :prod_id")
    int updateName(String name,String value, String prod_id);

我试过了,但它没有编译,错误是它需要获取列而不是字符串。

有什么方法可以将列作为变量放置吗?

这在 Room 中是不可能的,甚至在 SQLite 准备好的语句中也是不可能的,正如 CommonsWare 在他对原始 post 的评论中所说的那样。

虽然我没有对 SQLite 准备语句功能的引用,但如果您查看 Room here 的查询注释文档,您会看到它指出“[the] query is verified在编译时......以确保它可以针对数据库进行良好编译。”。这对于动态列名应该是不可能的。您还会注意到,对查询的解释有一定的深度,但是明显缺少变量 table 和列名等内容。

我知道这有点晚了,但也许对其他人有用。您可以尝试使用 @RawQuery which accepts SupportSQLiteQuery 作为值,而不是在 dao 中使用 @Query 注释,然后以老式的方式编写您的查询

我知道这个答案很老,但自从我来到这里后它仍然有用。

因此,现在您可以使用与您使用的语法完全相同的变量来编写查询。这就是文档所说的:

@Query("SELECT * FROM user WHERE user_name LIKE :name AND last_name LIKE :last")
     public abstract List<User> findUsersByNameAndLastName(String name, String last);

@Query("SELECT * FROM user WHERE uid IN(:userIds)")
     public abstract List findByIds(int[] userIds);

可以找到查询文档here