2010-11-29 20 views
0

私はユーザがユーザ入力でカスタムSQLクエリを作成できるようにするアプリケーションを作成しています。フォーマットなしのJava出力配列

は私が

for(JTextField field : fields){ 
if (!field.getText().equals("")){ 
    rows.add(field.getText()); 
} 
} 

を使用して配列にそれぞれのJTextFieldからfalueを追加するとき、私出力、それが角括弧私は、クエリ文字列に配列をinserので

[arVal1, arVal2, etc, etc] 

に包まれている配列

INSERT INTO table ([arval1, arval2, arVal3]) VALUES ([bla, bla, bla]) 

私は何らかの理由でクエリを実行すると、次のようになります。ORA-009 28:SELECTキーワードエラーがありません。クエリのデフォルトの文字列が次のような場合:

INSERT INTO table (arval1, arval2, arVal3) VALUES (bla, bla, bla) 

これは問題なく動作します。

イムを取り除くために探して配列を出力するときに、[]

はありがとう

答えて

1

あなたはグアバを(私はそれをお勧めします:))

StringBuilder builder = new StringBuilder(); 
builder.add("INSERT INTO table ("); 
for(int i=0; i<rows.length: rows){ 
    builder.add(row); 
    if(i<rows.length -1){ 
     builder.add(",") 
    } 
} 
builder.add(") VALUES ("); 
.... 
使用できない場合

Guavaを使用して完了するには、次のようになります。

Joiner commaJoiner = Joiner.on(", "); 
"INSERT INTO table (" + commaJoiner.join(rows) + " VALUES " + commaJoiner.join(values) 
+0

libをどのようにインポートしますか? import com.google.common.base.Joiner; doesnt仕事。 – slex

+1

また、クラスパスにguava jarを追加する必要があります。これを行う方法は、コードが実行されているコンテキストによって異なります。 IDEから実行している場合、インポートライブラリまたはライブラリ管理画面がどこかにあるはずです。 –

2

あなたは、配列のtoString方法に頼るべきではありません。 Guavaを使用して

Joiner.on(",").join(myArray);

+0

+1 guava(sooooo simple :)) –

0

たぶん、過度に複雑ソリューションを試してみたが、toString()をオーバーライドしてみてください

ArrayList<String> rows = new ArrayList<String>() 
    { 
     public String toString() 
     { 
      StringBuffer retVal = new StringBuffer(); 
      for(int i = 0; i < size(); i++) 
      { 
       retVal.append(this.get(i)); 
       if(i < size() - 1) 
       { 
        retVal.append(","); 
       } 
      } 
      return retVal.toString(); 
     } 
    }; 
+0

- conccurencyがない場合は、StringBufferの代わりにStringBuilderを使用し、toStringメソッドをオーバーライドするのではなく、リストを反復処理する方が良いと思います。 –

関連する問題