运行 使用 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}
);