2013-05-09 59 views
1

我有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

回答

1

加入您可以構建一個查詢作爲一個過濾器,此查詢追加到主查詢。

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

3

這很簡單!

只是嘗試:

import org.apache.commons.lang3.StringUtils; 


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

,你將不得不串用逗號

+0

謝謝我會嘗試這種方法。 – user75ponic 2013-05-09 12:38:01

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

謝謝,我會試試這個 – user75ponic 2013-05-09 12:27:14

1
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