2013-03-15 49 views
0

我有這樣一個ArrayList中:如何收集從一個ArrayList一個SQL請求

List<String> list = new ArrayList<String>(); 
    list.add("A"); 
    list.add("B"); 
    list.add("C"); 

,我想插入一個SQL查詢字符串這樣的信息:

AND Column_X in ('A' ,'B' , 'C') 

你能幫我 ?

編輯:

謝謝:) 我找到其他的解決辦法,這就是我想要的東西:

Iterator<String> iterator = list.iterator(); 
    String sqlStr= ""; 
    while (iterator.hasNext()){ 
     sqlStr+= "'"+iterator.next()+"'"; 
     if(iterator.hasNext()) sqlStr+= ','; 
    } 
    System.out.println(sqlStr); 
+3

你有什麼試過?你在使用ORM嗎?你是直接使用'SqlCommand'嗎?需要更多上下文。 – 2013-03-15 15:17:32

+0

你想做什麼?從數組列表中獲取sql代碼而不是每次需要時寫入它? – Azad 2013-03-15 15:22:34

+0

不,我正在使用沒有任何ORM的本地Java連接 – Z4k4r14 2013-03-15 15:24:47

回答

0

試試這個:

Connection c = ... 
Statement stmt = c.createStatement(); 
String sql = "SELECT * FROM test WHERE Column_X IN ('"; 
for(int i=0; i < list.size(); i++) { 
    if(i > 0) { 
     sql += ",'" 
    } 
    sql += list.get(i) + "'"; 
} 
sql += ")"; 
ResultSet r = stmt.executeQuery(sql); 
0

覆蓋toString的ArrayList方法和創建您期望形式的字符串。

1

您可以使用StringBuilder - 在列表上迭代自己,構建 「」 分隔的字符串。或者從apache commons項目中使用一個有用的API,如StringUtils.join(),它已經做到了。 請記住,參數需要適當地轉義以避免語法錯誤或更糟糕的SQL注入攻擊

0

list.toString()給你[A, B, C]。您必須忽略[]以及它的空格。

AND Column_X in ("'"+(list.toString().substring(1,list.toString().length()-1)).toString().replaceAll(",", "','").replaceAll(" ","")+"'")

1

你可以寫一個實用的方法是這樣的:

public static String getCommaSeparatedTexts(List<String> texts){ 
    final StringBuilder commaSeparatedTextBuilder = new StringBuilder("'"); 
    for (final String text : texts.values()) { 
     commaSeparatedTextBuilder.append(text); 
     commaSeparatedTextBuilder.append(','); 
    } 

    final int length = commaSeparatedTextBuilder.length(); 
    commaSeparatedTextBuilder.setLength(length - 1); 

    return commaSeparatedTextBuilder.toString(); 
} 

但要小心,當返回的字符串是空的,你的SQL語句將失敗。

+0

這是我想要的功能;) \t私人字符串arrayListToSQL(名單名單){ \t \t迭代迭代器= list.iterator(); \t String sqlStr =「」; (iterator.hasNext()){ \t sqlStr + =「'」+迭代器。下一個()+ 「'」; \t if(iterator.hasNext())sqlStr + =','; \t} \t return sqlStr; \t} – Z4k4r14 2013-03-18 23:41:19