将String数组值传递给sql IN条件

时间:2013-05-09 12:04:09

标签: java servlets

我有像

这样的String数组
String[] val=request.getParameterValues("Names");  
for(int i=0;i<val.length;i++){  
 //printval[i];
}

我想将String数组的值分配给sql语句

如何将所有字符串值传递给sql条件?如果数组具有以下值 JAMES,SMITH, JAKE等,然后我将其作为

传递
sql =  "where dept_name in('JAMES','SMITH','JAKE')"; 

理想情况下,我希望字符串数组值在sql的条件内传递。

4 个答案:

答案 0 :(得分:3)

这很简单!

试试:

import org.apache.commons.lang3.StringUtils;


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

您将使用逗号

加入字符串

答案 1 :(得分:2)

您可以将查询构建为过滤器,并将此查询附加到主查询。

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+")"; 

答案 2 :(得分:1)

这应该可以解决问题:

   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);

将csvStr.toString()用于您正在使用的sql。

  sql =  "where dept_name in (".concat(csvStr.toString()).concat(")"); 

答案 3 :(得分:1)

sql = "where dept_name in(select column_value from table(?))"; 

然后将Array传递给JDBC。

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