2011-01-04 2 views

答えて

3

あなたはguavaJoinerを使用することができます。

Joiner.on(",").join(inputsList); 
1

これは仕事を行います。ところで

public String separateByComma(List<String> input) { 

    // check for valid input!! 

    public StringBuilder sb = new StringBuilder(input.get(0)); 
    for (int i = 1; i < input.size(); i++) 
    sb.append(",").append(input.get(i)); 

    return sb.toString(); 
} 

を - あなたは二重引用符で囲んだ文字列が必要になる場合があります

public String separateByCommaForSQL(List<String> input) { 

    // check for valid input!! 

    public StringBuilder sb = new StringBuilder("\""+input.get(0)+ "\""); 
    for (int i = 1; i < input.size(); i++) 
    sb.append(",\"").append(input.get(i)).append("\""); 

    return sb.toString(); 
} 
+0

私は文字列を配列の配列に分割していますが、文字列の格納方法はわかりません。その文字列に区切り文字がない場合、どのように文字列を分割することができますか? – prasanna

+0

@prasanna - *いずれかの区切り文字を持つ*または*各列のサイズは固定です(名前フィールド*常に* 25 char )。それ以外の場合は、文字列を意味的に正しいものに分割するアルゴリズムを実装できません。 –

+0

文字列を書式設定するための他の方法はありますか? – prasanna

2

あなたが必要な場合はので、あなたの文字列が自動的にエスケープされPreparedStatementを使用する必要がありますあなたはSQLインジェクションから保護されます。

まず、リスト内の各要素のマーカーを含むステートメントを生成します。例:

select id, name from users where name in (?, ?, ?) 

次に、リストをループしてステートメントの値を設定します。

は、詳細については、この質問を見てみましょう:他の回答で指摘したように

What is the best approach using JDBC for parameterizing an IN clause?

0

を、あなたが参加を行うために使用することができ、多くのヘルパーがあります。

私は警告を追加したい:

は、ほとんどのDBMSは、あなたがこのように連結することができる値の数の上限を持っていることに注意してください。私たちはこれまでにこれまで走ってきました。数十を超える価値がないことが確実でない場合は、この制限を超えないようにする必要があります(これは、すべてのDBMSで異なります。場合によっては設定可能な場合もあります)。

通常、制限は、SQL文の合計サイズの制限、またはコンマ区切りのリスト内の値の数の明示的な制限のいずれかになります。

この問題が発生した場合は、値リストの一時(または永続)テーブルを作成し、このテーブルに値をINSERT入力します。その後、リストをSQLステートメントに入れる代わりにWHERE xxx IN (SELECT column FROM helpertable)を使用することができます。これにより、最大長問題を回避できます。リストを再利用する必要がある場合はおそらく速いでしょう。あなたは一度だけしかしリスト...

0

珍しいソリューションを必要とする場合それは、より面倒(そしておそらく遅い):文字列はArrayListまたはLinkedListjava.util.AbstractCollectionのサブクラス)である場合は、返すtoString()を「[呼び出しe1、e2、e3 ...] "となります。その後、文字列を処理することができます。

関連する問題