首先,我将解释我的用例:
我将从用户(Can of size 2,5,1)
获取一个字符串数组e.g Suppose user input is like this:
String[] names={"Micheal", "Joe","Jim"}
现在从用户那里获取输入后,我必须点击名为“USERS”的SQL表,并检查USERS表中是否存在所有这些名称。如果没有任何单个名称,则返回false。如果USERS表中存在所有名称,则返回true。
我的想法:
我的想法是打击USERS表。在String数组(名为all_names)中获取USERS表的所有名称,然后将我的输入字符串(即名称)与此all_names字符串进行比较。因此,如果names是all_names的子集,则返回true,否则返回false。
问题:
但我认为这不是一个有效的解决方案。当这个表扩展时,我将有数千条记录,所以这种技术将非常详尽。请为此提供任何其他更好,更有效的解决方案。
更新了解决方案:
假设USERS表中的名称是唯一的。
感谢您的回复。现在我从你的答案得到帮助后采用了这种方法。我想知道这个解决方案是否是更好的方法:
String[] names={"Micheal","Jim","Joe"};
String list2string = StringUtils.join(names, ", ");
//connection was established previosuly
stmt = conn.createStatement();
System.out.println(list2string);
rs = stmt.executeQuery("SELECT COUNT(*) AS rowcount FROM USERS WHERE name IN (" +
list2string +
")");
rs.next();
int count = rs.getInt("rowcount");
rs.close();
if(names.length==count){
System.out.println("All names are in users table");
}else{
System.out.println("All names are not present in users table");
}
希望您对此更新的解决方案发表意见。
此致
答案 0 :(得分:3)
你是对的,这不是很有效。
执行此类操作是数据库工作。
您可以为每个名称制作一个select语句,例如。
SELECT name FROM users WHERE name = 'Micheal'
或
SELECT name FROM users WHERE name IN ('Micheal', 'Joe', 'Jim')
并检查返回的行。
根据您用于查询数据库的框架,它可能会有所不同。
答案 1 :(得分:2)
你可以使用循环来形成一个字符串数组
例如,如果你有这样的字符串数组:
String [] names = {“Micheal”,“Joe”,“Jim”}
得到一个字符串让我们说s - > “迈克尔”,“乔”,“吉姆”
现在查询如下:
String sql = SELECT name FROM users WHERE name IN(“+ s +”)“。(您可以检查格式)。
获取输出集合并与给定集合进行比较。
答案 2 :(得分:1)
一种方法,可以是
SELECT
COUNT(DISTINCT name)
FROM
users
WHERE
name IN ('Micheal', 'Joe', 'Jim')
然后检查计数是否等于你的参数计数,在我们的例子中,我们应该得到3。
答案 3 :(得分:1)
我将从用户那里获得一个字符串数组(可以大小为2,5,1)
您从用户那里获得了输入,您使用查询命中数据库:
从SCHEMA_NAME.TABLE_NAME中选择(WHATEVER_YOU_NEED)WHERE COLUMN IN (USER_PROVIDED_INPUT);
您将此结果存储在List中。
在String数组中获取USERS表的所有名称(名为all_names) 然后将我的输入字符串(即名称)与此all_names进行比较 串。因此,如果name是all_names的子集,则返回true 返回false。
是的,你是对的,所以你将使用
boolean isSubset = listA.containsAll(listB);
并且,如果您的数据库具有唯一的名称(我想这可能是重复的),您只需从SQL查询中获取计数并将其与用户输入匹配。
我希望这会有所帮助。
答案 4 :(得分:0)
SELECT IF(
( SELECT COUNT(DISTINCT name) FROM users WHERE name IN ({toSearch}) ) = {Count},
, 1 , 0
) as Result
将{toSearch}替换为例如' Micheal',' Joe',' Jim' {count}是搜索的数量,在此示例中为3.所以如果所有列都存在"结果"值为1,否则为0