传递字符串数组值的sql IN条件

问题描述:

我有String数组一样传递字符串数组值的sql IN条件

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的条件下通过。

+2

为什么不能使用'StringBuilder'来构建预准备语句? – Shark 2013-05-09 12:05:11

+0

也许[这](http://stackoverflow.com/questions/16372046/getting-records-from-database-with-variable-condition/16372094#16372094)是你想要的 – A4L 2013-05-09 12:09:47

加入您可以构建一个查询作为一个过滤器,此查询追加到主查询。

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

刚刚更新了我的错误答案。你可以试试吗? – 2013-05-09 12:16:15

+0

我忘了把val作为数组,你可以再试一次吗? – 2013-05-09 12:20:57

+0

它工作正常,谢谢 – user75ponic 2013-05-09 12:26:54

这很简单!

只是尝试:

import org.apache.commons.lang3.StringUtils; 


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

,你将不得不串用逗号

+0

谢谢我会尝试这种方法。 – user75ponic 2013-05-09 12:38:01

这应该做的伎俩:

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

谢谢,我会试试这个 – user75ponic 2013-05-09 12:27:14

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

则数组从JDBC传递到。

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

*“从表格(?)中选择column_value”应该如何适应? – Tom 2017-02-07 12:07:20