2013-07-16 69 views
2

我正在嘗試創建一個通用的UPDATE-這樣的陳述,其中只有表名是固定的。JavaDB匿名列名

updateValueQuery = conn.prepareStatement("UPDATE TABLENAME SET (?)=(?)"); 

失敗,SQLException抱怨語法。只要我指定列名如下:

updateValueQuery = conn.prepareStatement("UPDATE TABLENAME SET COL_NAME=(?)"); 

SQL快樂地編譯。有什麼方法可以使列名匿名嗎?

我正在使用Apache德比。

+0

只有建立它作爲一個字符串,並傳遞一個到prepareStatment方法(所有的SQL注入的問題是這需要) – davek

+0

幾乎'prepareStatement(「?」)' ;你自己的模板,w.r.t.列名:'String.format(「UPDATE TABLENAME SET%s =?」,「COL_NAME」) ' –

+0

是的,這就是我解決它的方法。我希望有一個更清潔的方式,但顯然不是:( –

回答

2

不,PreparedStatement擁有僅限值的持有者。 我在下面的方式解決類似的問題:

private final String FIND_STRING = "select * from TABLENANE where {0} = ?"; 
     . 
     . 
     . 
    private final Map<String, PreparedStatement> statements = new HashMap<String, PreparedStatement>(); 

    private PreparedStatement prepareStatement(String field, String toFind) throws SQLException{ 
     PreparedStatement statement = null; 
     if (statements.contains(field)){ 
      statement = statements.get(field); 
     }else{ 
      String findInHelpDefinition = MessageFormat.format(FIND_STRING, field)); 
      statement = connection.prepareStatement(findInHelpDefinition); 
      statemnts.put(field, statement); 
     } 
     statement.setString(1, toFind); 
     return statement; 
    } 
+0

謝謝,這看起來很有前途! –