我在我的项目中使用了room persistent library。我试图在查询中使用'like'子句但我无法使用。我已经尝试了编译时间(Query)和运行时查询(Raw Query)。它既没有给出任何异常,也没有提供任何输出。
我尝试了以下方法,但没有一个工作: -
@Query("select * from recipe where type_of_diet like '%vegetarian%' ")
public abstract DataSource.Factory<Integer, RecipeListPojo>
getRecipeListVeg();
@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”
请告诉我如何运行这些类型的查询。
房间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>>
语法对于您的查询不正确。根据documentation,查询将类似于
@Query("SELECT * FROM user WHERE user_name LIKE :name AND last_name LIKE :last")
public abstract List<User> findUsersByNameAndLastName(String name, String last);
在这里arguments
和key written with LIKE :
必须匹配。
阅读Android Room - Select query with LIKE,在kotlin中可以清除这个逻辑。
您必须在符号“%”之前附加作为字符串的前缀和后缀,例如:
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);
希望这可以帮助。