Java 将字符串数组值传递给条件中的sql

Java 将字符串数组值传递给条件中的sql,java,servlets,Java,Servlets,我有一个字符串数组 String[] val=request.getParameterValues("Names"); for(int i=0;i<val.length;i++){ //printval[i]; } 理想情况下,我希望字符串数组值在sql条件下的内部传递。这非常简单 试试看: import org.apache.commons.lang3.StringUtils; StringUtils.join(new String[] {"Hello", "World"

我有一个字符串数组

String[] val=request.getParameterValues("Names");  
for(int i=0;i<val.length;i++){  
 //printval[i];
}
理想情况下,我希望字符串数组值在sql条件下的内部传递。

这非常简单

试试看:

import org.apache.commons.lang3.StringUtils;


StringUtils.join(new String[] {"Hello", "World", "!"}, ", ");

您将使用逗号连接字符串,您可以将查询构造为筛选器,并将此查询附加到主查询

StringBuilder sb= new StringBuilder();
String filter = "";

String[] val=request.getParameterValues("Names");  
for(int i=0;i<val.length;i++){  
 //printval[i];
 sb.append( "'"+val[i]+"'," );
}

filter = sb.ToString();
filter = filter.substring(0, filter.length()-1);

sql =  "where dept_name in("+filter+")"; 
StringBuilder sb=新建StringBuilder();
字符串过滤器=”;
字符串[]val=request.getParameterValues(“名称”);

对于(int i=0;i这应该可以做到:

   StringBuilder csvStr = new StringBuilder();
    for(int i=0;i<val.length;i++){
        if (val.length > 1 && i !=0) {
            csvStr.append(",");
        }
        csvStr.append ("'").append(val[i]).append("'");
    }
    System.out.println(csvStr);
然后将数组从JDBC传递到

Object[] dept = {"Dev","QA", "Support"};
Array deptArray = connection.createArrayOf("VARCHAR", dept);
preparedStatement.setArray(idx, deptArray);

为什么您不能使用
StringBuilder
来构建一个预先准备好的语句?可能是您想让我忘记将val作为数组,您可以再试一次吗?谢谢,我将尝试这种方法。“从表(?)中选择列\u值”如何应该适合这里吗?sql中的for循环和附加值问题是安全问题,因为它可能会导致sql注入问题。如果仍要使用,则应使用encode literals。column_值将是oracle创建的标量嵌套表的伪列。
  sql =  "where dept_name in (".concat(csvStr.toString()).concat(")"); 
sql = "where dept_name in(select column_value from table(?))"; 
Object[] dept = {"Dev","QA", "Support"};
Array deptArray = connection.createArrayOf("VARCHAR", dept);
preparedStatement.setArray(idx, deptArray);