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 を使用できます。リストを自分で反復処理して、「,」で区切られた文字列を作成します。StringUtils.join()または、すでにそれを行っている apache commons プロジェクトのような便利な API を使用してください。構文エラーやさらに悪いことに、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();
}

ただし、返された文字列が空の場合、SQL ステートメントは失敗することに注意してください。

于 2013-03-15T15:45:21.677 に答える
0

arrayList のメソッドを上書きtoStringし、期待する形式の文字列を作成します。

于 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 に答える