2010-11-29 51 views
0

我正在编写一个应用程序,允许用户使用用户输入创建自定义SQL查询。Java - 没有格式化的输出数组

我从每个JTextField的添加falue使用

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

阵列在i输出的阵列它被包裹在方括号

[arVal1, arVal2, etc, etc] 

因此,当我inser阵列到查询字符串它看起来像这样:

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 ("); 
.... 

要用番石榴完成,它看起来像这样:

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

如何导入lib? import com.google.common.base.Joiner;不工作。 – slex 2010-11-29 17:48:22

2

你不应该依赖于数组的toString方法。

使用Guava,尝试Joiner.on(",").join(myArray);

+0

+1对于番石榴(sooooo简单:)) – 2010-11-29 17:30:34

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

- 如果没有调度,请使用StringBuilder而不是StringBuffer,并且,我认为最好迭代列表而不是重写toString方法 – 2010-11-29 17:32:45