我在我的项目中使用房间持久性库。我试图在查询中使用'like'子句但我无法使用。我已经尝试了编译时间(Query)和运行时查询(Raw Query)。它既没有给出任何异常,也没有提供任何输出。
我尝试了以下方法,但没有一种方法有效: -
编译时间查询 -
@Query("select * from recipe where type_of_diet like '%vegetarian%' ")
public abstract DataSource.Factory<Integer, RecipeListPojo>
getRecipeListVeg();
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”
请告诉我如何运行这些类型的查询。
答案 0 :(得分:3)
房间1.1.1 + RxJava2 + Kotlin运行正常:
@Query("SELECT * FROM user WHERE name LIKE '%' || :name || '%' ")
fun getUsers(name: String): Single<List<UserEntity>>
带有参数:
let dataid = infosStructured.filter(elm => {
console.log(elm.identifiant);
console.log("matching value", elm.identifiant == this.dataService.getcurrentId()); // I get a true value
elm.identifiant == this.dataService.getcurrentId();
});
console.log(dataid); // empty
答案 1 :(得分:0)
语法对您的查询不正确。根据{{3}},查询类似于
@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 :
必须匹配。
阅读documentation,这在kotlin中可能会清除这种逻辑。
答案 2 :(得分:0)
您必须在符号“%”之前附加字符串的前缀和后缀,例如:
字符串参数=“%” + mMyString +“%”;
然后声明您的DAO方法,例如:
@Query(“ SELECT * FROM track_table WHERE title LIKE:param” +“ OR artist LIKE:param” +“ OR album like:param”) List
希望这会有所帮助。