在 Room 的 where 子句中使用 List
Using List in where clause in Room
我正在使用 Room for DB,并且有一个名为 'Products' 的 table。
产品实体 class 具有字段 ArrayList'String' 标签。
@Entity Class Products { some auto generate primary key; String name; ArrayList<String>tags;}
我想按标签搜索产品,怎么办?
我们可以在 where 子句中使用 'tags' 吗?我在下面尝试但没有成功:
select name from Products where tags IN (:value)
List<String> getSearchedProducts(String value);
使用此类型转换器保存列表。
public class StringListConverters {
private static Gson gson = new Gson();
@TypeConverter
public static ArrayList<String> fromString(String data) {
Type listType = new TypeToken<ArrayList<String>>() {}.getType();
return gson.fromJson(data, listType);
}
@TypeConverter
public static String fromArrayList(ArrayList<String> list) {
return gson.toJson(list);
}
}
按名称搜索有效,但按标签搜索无效。
除了语法、错误修复等之外,我正在寻找在 Room DB 中搜索集合的方法。
您尝试实现的目标有效,我遇到了 问题。在我的例子中,我有一个 String[]
,如果你提供一个用逗号分隔的 String
,它就不起作用,但它也应该与 ArrayList
一起工作。
如果您不经常操作 tags
列表并且在创建后不向其添加元素,则使用 String[]
。这样你就不必使用 TypeConverter
.
我得到了答案,很简单。
这就是我们搜索存储在列中的 ArrayList 的方式。
select name from Products where tags Like :value
List<String> getSearchedProducts(String value);
这也是有道理的,因为 Room 将列表转换为字符串条目并保存在列中,根据我在搜索 ArrayList 时的假设,它将像 foreach 循环一样在该列中循环。
要按名称或标签搜索,您可以这样做:
select name from Products where name Like :value OR tags Like :value
List<String> getSearchedProducts(String value);
我正在使用 Room for DB,并且有一个名为 'Products' 的 table。 产品实体 class 具有字段 ArrayList'String' 标签。
@Entity Class Products { some auto generate primary key; String name; ArrayList<String>tags;}
我想按标签搜索产品,怎么办? 我们可以在 where 子句中使用 'tags' 吗?我在下面尝试但没有成功:
select name from Products where tags IN (:value)
List<String> getSearchedProducts(String value);
使用此类型转换器保存列表。
public class StringListConverters {
private static Gson gson = new Gson();
@TypeConverter
public static ArrayList<String> fromString(String data) {
Type listType = new TypeToken<ArrayList<String>>() {}.getType();
return gson.fromJson(data, listType);
}
@TypeConverter
public static String fromArrayList(ArrayList<String> list) {
return gson.toJson(list);
}
}
按名称搜索有效,但按标签搜索无效。 除了语法、错误修复等之外,我正在寻找在 Room DB 中搜索集合的方法。
您尝试实现的目标有效,我遇到了 String[]
,如果你提供一个用逗号分隔的 String
,它就不起作用,但它也应该与 ArrayList
一起工作。
如果您不经常操作 tags
列表并且在创建后不向其添加元素,则使用 String[]
。这样你就不必使用 TypeConverter
.
我得到了答案,很简单。 这就是我们搜索存储在列中的 ArrayList 的方式。
select name from Products where tags Like :value
List<String> getSearchedProducts(String value);
这也是有道理的,因为 Room 将列表转换为字符串条目并保存在列中,根据我在搜索 ArrayList 时的假设,它将像 foreach 循环一样在该列中循环。
要按名称或标签搜索,您可以这样做:
select name from Products where name Like :value OR tags Like :value
List<String> getSearchedProducts(String value);