Java 使用集合字符串在sqlite上运行查询

Java 使用集合字符串在sqlite上运行查询,java,android,sqlite,android-sqlite,Java,Android,Sqlite,Android Sqlite,我是sqlite和数据库的新手。我有一套输入法。 当我记录它时,它看起来像这样: D/tag input: [item1,item2,item3,item4] 现在我想对数据库中的这些项目进行查询。但我从中一无所获。我的问题是: cursor = db.rawQuery("SELECT * from menu_items where 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})
我不知道我哪里做错了。有人能帮我处理这个案子吗? 谢谢

您应该使用

cursor = db.rawQuery("SELECT * from menu_items where menu_item_name in " +
"(" + Arrays.stream(input).map(e-> "'" + e + "'").collect(Collectors.joining(",")) + ")"
)
你应该使用

cursor = db.rawQuery("SELECT * from menu_items where menu_item_name in " +
"(" + Arrays.stream(input).map(e-> "'" + e + "'").collect(Collectors.joining(",")) + ")"
)

由于
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}
);
如果每个逗号后都有空格:

cursor = db.rawQuery(
    "SELECT * FROM menu_items WHERE ', ' || ? || ', ' LIKE '%, ' || menu_item_name || ', %'", 
    new String[]{input}
);

由于
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}
);
如果每个逗号后都有空格:

cursor = db.rawQuery(
    "SELECT * FROM menu_items WHERE ', ' || ? || ', ' LIKE '%, ' || menu_item_name || ', %'", 
    new String[]{input}
);


谢谢你的回复。我在第二节中出错了。第一个是Arrays.stream(input),错误是:无法解析方法“stream(java.lang.String)”和收集器。连接:用于Api 24,而我的是21:想法是使用一个带有列表
“('item1','item2','item3','item4')”的字符串。
,您可以使用其他方法(如for循环)为响应创建itthank。我在第二节中出错了。第一个是Arrays.stream(input),有以下错误:无法解析方法“stream(java.lang.String)”和收集器。连接:用于Api 24,而我的是21:想法是使用一个列表
“('item1','item2','item3','item4')”
,您可以使用其他方法(如for循环)要创建一个数组或字符串,它不是数组。它是用方括号括起来的?是
input
数组还是字符串?它不是数组。它被包裹在方括号中?嗨。谢谢你的回复。对于第一个查询,它在运行查询之前显示一个erorr。“预期,得到‘替换’”。对于第二个,没有错误,但没有返回任何内容。我不知道您如何运行此代码。你复制并粘贴了它吗?检查一个运行良好的演示:我试图手动删除括号,字符串看起来像“item1,item2,item3,item4”。然后我运行第二个查询。它可以工作,但它只返回其中一个,而不是所有的输入。值和逗号之间有空格吗?它可以工作。谢谢这是你第二次或第三次帮助我。非常感谢。谢谢你的回复。对于第一个查询,它在运行查询之前显示一个erorr。“预期,得到‘替换’”。对于第二个,没有错误,但没有返回任何内容。我不知道您如何运行此代码。你复制并粘贴了它吗?检查一个运行良好的演示:我试图手动删除括号,字符串看起来像“item1,item2,item3,item4”。然后我运行第二个查询。它可以工作,但它只返回其中一个,而不是所有的输入。值和逗号之间有空格吗?它可以工作。谢谢这是你第二次或第三次帮助我。谢谢