运行 使用 Set 字符串查询 sqlite
run query on sqlite using a Set string
我是 sqlite 和数据库的新手。我有一个设置输入。
当我记录它时,它看起来像这样:
D/tag input: [item1,item2,item3,item4]
现在我想查询数据库中的这些项目。但我从中一无所获。这是我的查询:
cursor = db.rawQuery("SELECT * from menu_items where menu_item_name=?", new String[]{input})
我不知道我哪里做错了。有人可以帮我处理这个案子吗?
谢谢
你应该使用 IN,类似
cursor = db.rawQuery("SELECT * from menu_items where menu_item_name in " +
"(" + Arrays.stream(input).map(e-> "'" + e + "'").collect(Collectors.joining(",")) + ")"
)
由于 input
是一个包含逗号分隔的字符串列表的字符串,您不能使用运算符 =
或 IN
.
你需要的是运算符LIKE
.
如果input
的值中还有方括号:
cursor = db.rawQuery(
"SELECT * FROM menu_items WHERE ',' || REPLACE(REPLACE(?, '[', ''), ']', '') || ',' LIKE '%,' || menu_item_name || ',%'",
new String[]{input}
);
如果不是那么可以简化代码:
cursor = db.rawQuery(
"SELECT * FROM menu_items WHERE ',' || ? || ',' LIKE '%,' || menu_item_name || ',%'",
new String[]{input}
);
如果每个逗号后有一个space:
cursor = db.rawQuery(
"SELECT * FROM menu_items WHERE ', ' || ? || ', ' LIKE '%, ' || menu_item_name || ', %'",
new String[]{input}
);
我是 sqlite 和数据库的新手。我有一个设置输入。 当我记录它时,它看起来像这样:
D/tag input: [item1,item2,item3,item4]
现在我想查询数据库中的这些项目。但我从中一无所获。这是我的查询:
cursor = db.rawQuery("SELECT * from menu_items where menu_item_name=?", new String[]{input})
我不知道我哪里做错了。有人可以帮我处理这个案子吗? 谢谢
你应该使用 IN,类似
cursor = db.rawQuery("SELECT * from menu_items where menu_item_name in " +
"(" + Arrays.stream(input).map(e-> "'" + e + "'").collect(Collectors.joining(",")) + ")"
)
由于 input
是一个包含逗号分隔的字符串列表的字符串,您不能使用运算符 =
或 IN
.
你需要的是运算符LIKE
.
如果input
的值中还有方括号:
cursor = db.rawQuery(
"SELECT * FROM menu_items WHERE ',' || REPLACE(REPLACE(?, '[', ''), ']', '') || ',' LIKE '%,' || menu_item_name || ',%'",
new String[]{input}
);
如果不是那么可以简化代码:
cursor = db.rawQuery(
"SELECT * FROM menu_items WHERE ',' || ? || ',' LIKE '%,' || menu_item_name || ',%'",
new String[]{input}
);
如果每个逗号后有一个space:
cursor = db.rawQuery(
"SELECT * FROM menu_items WHERE ', ' || ? || ', ' LIKE '%, ' || menu_item_name || ', %'",
new String[]{input}
);