Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 创建逗号分隔字符串作为sql“IN”子句的输入_Java_String - Fatal编程技术网

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

Java 创建逗号分隔字符串作为sql“IN”子句的输入,java,string,Java,String,我想要一个字符串作为SQL IN子句的输入,其中我想要一个由逗号分隔的字符串列表,您可以使用: 您可以使用方法,也可以自己实现联接操作。这样做: public String separateByComma(List<String> input) { // check for valid input!! public StringBuilder sb = new StringBuilder(input.get(0)); for (int i = 1; i <

我想要一个字符串作为SQL IN子句的输入,其中我想要一个由逗号分隔的字符串列表,您可以使用:

您可以使用方法,也可以自己实现联接操作。

这样做:

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();
}
顺便说一句,您可能需要将字符串用双引号括起来:

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();
}
您应该使用,以便在必要时自动转义字符串,并防止sql注入

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

select id, name from users where name in (?, ?, ?)
然后在列表上循环并在语句中设置值

有关详细信息,请查看此问题:


正如其他答案所指出的,您可以使用许多助手来加入

我想补充一条警告:

请注意,大多数DBMS对可以这样连接的值的数量都有一个上限。我们以前遇到过这种情况;如果您不确定自己的值不会超过几十个左右,则必须确保不会超过此限制,这对于每个DBMS都是不同的,有时甚至是可配置的

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


如果遇到此问题,另一种方法是为“值”列表创建临时或永久表,并将值插入此表中。然后,您可以在helpertable的SELECT列中使用WHERE xxx,而不是将列表放入SQL语句中。这避免了最大长度问题;如果您需要重新使用列表,它可能会更快。如果只需要一次列表,则会更麻烦,而且可能会更慢…

一个不同寻常的解决方案:如果字符串位于java.util.AbstractCollection的ArrayList或LinkedList子类中,则调用返回[e1、e2、e3…]的字符串。然后您可以处理该字符串。

您希望在IN子句中传递什么值?谢谢大家的回答我有一个字符串,我将该字符串拆分为字符串数组。但该字符串的存储方式未知。如果该字符串中没有分隔符,我怎样才能把钱平分呢string@prasanna-要么您有某种类型的分隔符,要么每个列的大小都是固定的,如:name field always 25 char。否则,您无法实现算法来将语义正确的字符串拆分为多个部分。我将下拉列表中选定的值存储在字符串中。但值之间没有分隔符,因此我无法拆分字符串。是否有其他方法进行字符串格式化。或者有其他方法将字符串存储到array@prasanna-然后在连接选定值时添加分隔符。否则您必须处理Stringcontains表达式以进行测试,如果其中一个表达式已知!选择组合框项目。返回sb.toString;返回像'ACT','INACT'这样的值,但从java调用函数时,它被称为调用函数1,2,'ACT','INACT',3,4。问题是括号内的逗号。我必须转义这些逗号。我怎么做??
select id, name from users where name in (?, ?, ?)