在房间持久性库不能使用like子句

问题描述 投票:0回答:3

我在我的项目中使用了room persistent library。我试图在查询中使用'like'子句但我无法使用。我已经尝试了编译时间(Query)和运行时查询(Raw Query)。它既没有给出任何异常,也没有提供任何输出。

我尝试了以下方法,但没有一个工作: -

  1. 编译时查询 - @Query("select * from recipe where type_of_diet like '%vegetarian%' ") public abstract DataSource.Factory<Integer, RecipeListPojo> getRecipeListVeg();
  2. RawQuery - @RawQuery(observedEntities = RecipeListPojo.class) public abstract DataSource.Factory<Integer,RecipeListPojo> getAllRecipesList(SupportSQLiteQuery sqLiteQuery); String query="select * from recipe where type_of_diet like '%vegetarian%' "; SimpleSQLiteQuery simpleSQLiteQuery = new SimpleSQLiteQuery(query); recipeDao.getAllRecipesList(simpleSQLiteQuery);

compileSdkVersion 27

使用的库 - 实现“android.arch.persistence.room:runtime:1.1.0-beta3”annotationProcessor“android.arch.persistence.room:compiler:1.1.0-beta3”

请告诉我如何运行这些类型的查询。

android android-sqlite android-room android-architecture-components
3个回答
3
投票

房间1.1.1 + RxJava2 + Kotlin工作正常:

@Query("SELECT * FROM user WHERE name LIKE '%Tom%' ")
fun getUsers(): Single<List<UserEntity>>

带参数:

@Query("SELECT * FROM user WHERE name LIKE '%' || :name || '%' ")
fun getUsers(name: String): Single<List<UserEntity>>

0
投票

语法对于您的查询不正确。根据documentation,查询将类似于

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

在这里argumentskey written with LIKE :必须匹配。


阅读Android Room - Select query with LIKE,在kotlin中可以清除这个逻辑。


0
投票

您必须在符号“%”之前附加作为字符串的前缀和后缀,例如:

String param =“%”+ mMyString +“%”;

然后声明你的DAO方法,例如:

@Query(“SELECT * FROM track_table WHERE title LIKE:param”+“OR artist LIKE:param”+“OR album like:param”)List <Track> search(String param);

希望这可以帮助。

© www.soinside.com 2019 - 2024. All rights reserved.