房间:在查询中使用变量

时间:2017-12-19 19:27:03

标签: android sql android-room

我在我的应用程序中使用Room DB,并且我希望在查询中将列名称作为变量,以便我可以“随时”操作它(在调用方法时)。

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

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

我尝试了但是它没有编译,错误是需要获取列而不是String。

是否有任何方法可以将列作为变量放置?

3 个答案:

答案 0 :(得分:1)

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

虽然我没有引用SQLite预处理语句功能,但如果您查看Room here的查询注释文档,您会看到它指出" [在编译时验证]查询...以确保它对数据库编译良好。"。动态列名称应该是不可能的。您还会注意到查询的解释有一定深度,但变量表和列名等内容明显缺失。

答案 1 :(得分:1)

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

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

@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

答案 2 :(得分:0)

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