2013-07-16 70 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

谢谢,这看起来很有前途! –