2013-12-13 90 views
0

我試圖通過動態查詢更新一行中的多個列。在更新查詢中添加幾列

COLUMNNAMES是包含各列的所有名稱爲所選擇的表

Arrays.toString(行)中包含的該行應該被更新爲用戶輸入的ArrayList。

當試圖運行這個時,我在列名處得到這個錯誤消息:沒有這樣的列[SNO,SNAME,STATUS,CITY]。我不知道有什麼方法可以解決這個問題?

query = "UPDATE " + tablename + " SET '" + columnnames + "' = '" + Arrays.toString(row) + "' WHERE " + FirstColumn + " = '" + rowstandard + "'"; 

回答

1

您需要分別更新每列。你不能以數組的形式傳遞它們。

query = "UPDATE " + tablename + " SET " 
foreach(int i=0; i< columnnames.length; i++) 
{ 
    query+= "'" + columnnames[i] + "' = '" + row[i] + "'," 
} 
query = StripLastComma(query) //Not sure how to do this in Java. 
query +="' WHERE " + FirstColumn + " = '" + rowstandard + "'" 
+0

看起來不錯,我只是不知道如何去掉最後的逗號? :/ – Looptech

+0

在C#中它將是query = query.Substring(0,query.length-1)。在Java中也是這樣的。 –

0

那不是打算作爲語法組的工作是SET ColumnA =:值a,ColumnB =:VALUEB WHERE 「+ FirstColumn +」=「」 + rowstandard + 「'」;

0

由於它有人指出正確的語法更新查詢是:

UPDATE [LOW_PRIORITY] [IGNORE] table_reference 
SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ... 
[WHERE where_condition] 
[ORDER BY ...] 
[LIMIT row_count] 

看到Update syntax

話雖如此,我會做這樣的事情(使用guava):

StringBuilder query = new StringBuilder(); 
query.append("UPDATE " + tablename + " SET "); 
// build a map of col name/value 
Map<String, String> map = Maps.toMap(columnnames, new Function<String, String>(){ 
     @Override 
     public String apply(String input){ 
      return row[columnnames.indexOf(input)].toString(); 
     } 
    }); 
query.append(Joiner.on(",").withKeyValueSeparator("=").join(map)); 
query.append(" WHERE " + FirstColumn + " = '" + rowstandard + "'"); 
query.toString(); 
+0

嗯,我看到法案gregs解決方案作爲我的程序最好的,但你知道我如何擺脫最後的逗號?因爲我試圖打印出來,唯一破壞我的查詢的是我的最後一個逗號 – Looptech

+0

- 沒有這樣的問題;)但如果你想擺脫最後的逗號,你可以做這樣的事情:'query = query。 substring(0,query.lastIndexOf(「,」));'你需要添加它而不是'query = StripLastComma(query)' –

+0

什麼是str?即時通訊出現錯誤 – Looptech