创建逗号分隔的字符串,作为sql“IN”子句的输入

时间:2011-01-04 09:22:48

标签: java string

我想要一个字符串作为SQL“IN”子句的输入,其中我想要一个用逗号分隔的字符串列表

6 个答案:

答案 0 :(得分:3)

您可以使用guavaJoiner

Joiner.on(",").join(inputsList);

答案 1 :(得分:2)

您应该使用PreparedStatement,以便在必要时自动转义您的字符串,并且您将受到sql注入的保护。

首先,为列表中的每个元素生成一个带有标记的语句。例如:

select id, name from users where name in (?, ?, ?)

然后循环遍历列表并在语句中设置值。

详细了解这个问题:

What is the best approach using JDBC for parameterizing an IN clause?

答案 2 :(得分:1)

这就是工作:

public String separateByComma(List<String> input) {

   // check for valid input!!

   public StringBuilder sb = new StringBuilder(input.get(0));
   for (int i = 1; i < input.size(); i++)
     sb.append(",").append(input.get(i));

   return sb.toString();
}

BTW - 你可能需要用双引号括起来的字符串:

public String separateByCommaForSQL(List<String> input) {

   // check for valid input!!

   public StringBuilder sb = new StringBuilder("\""+input.get(0)+ "\"");
   for (int i = 1; i < input.size(); i++)
     sb.append(",\"").append(input.get(i)).append("\"");

   return sb.toString();
}

答案 3 :(得分:0)

您可以使用org.apache.commons.lang.StringUtils.join()方法,或自己实施联接操作。

答案 4 :(得分:0)

正如其他答案所指出的那样,您可以使用许多帮助来进行加入。

我想补充一点:

请注意,大多数DBMS都可以像这样连接的值的数量上限。我们之前遇到过这种情况;如果你不确定你将永远不会超过几十个值,你必须确保不超过这个限制(每个DBMS都有所不同,有时甚至可以配置)。

限制通常来自SQL语句总大小的限制,或者以逗号分隔列表中值的显式限制。

如果遇到此问题,另一种方法是为值列表创建临时(或永久)表,并将INSERT值放入此表中。然后,您可以使用WHERE xxx IN (SELECT column FROM helpertable)而不是将列表放入SQL语句中。这避免了最大长度问题;如果您需要重新使用列表,它也可能更快。如果您只需要列表一次,那就更麻烦(也可能更慢)......

答案 5 :(得分:0)

一个不寻常的解决方案:如果字符串位于ArrayListLinkedListjava.util.AbstractCollection的子类),请致电toString(),返回“ [e1,e2 ,e3 ......] “。然后你可以处理字符串。