0

我有一个这样的arrayList:

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

5 回答 5

1

您可以使用 StringBuilder - 自己迭代列表,构造一个“,”分隔的字符串。或者使用一个有用的 API,比如StringUtils.join()已经这样做的 apache commons 项目。请记住,参数需要正确转义以避免语法错误,或者更糟糕的 SQL 注入攻击

于 2013-03-15T15:36:41.017 回答
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();
}

But be careful, when the returned String is empty, your SQL statement will fail.

于 2013-03-15T15:45:21.677 回答
0

覆盖toStringarrayList 的方法并以您期望的形式创建一个字符串。

于 2013-03-15T15:22:48.670 回答
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);
于 2013-03-15T15:36:34.587 回答
0

list.toString()给你[A, B, C]。你必须忽略它[]并从中隔开。

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

于 2013-03-15T15:36:51.230 回答