2012-09-14 53 views
0

我有以下问题: 我在一个数据库中有两个表,其中包含除最后一列的名称之外的相同列。我想用Java将数据写入它们。 我想使用相同的PreparedStatement做两个表,在那里我有一个if命令检查是否table 1或2 tabletable 2具有amount10作为名称的最后一列,table 1具有amount20它。这number存储在我的代码中的一个变量。使用PreparedStatement在Java INSERT INTO命令中保留列名变量?

下面您可以看到一个(简化)示例,以及我如何尝试让列名称变量但它不起作用。有没有办法解决这个问题,而无需复制整个语句并手动更改number变量?

String insertData = "INSERT INTO `database`.`"+table+"` 
(`person_id`,`Date`,`amount`+"number") VALUES "+ 
"(?,?,?) ON DUPLICATE KEY UPDATE " + 
"`person_id` = ? , " + 
"`Date` = ? , " + 
"`amount`+"number" = ? ; "; 
PreparedStatement insertDataStmt; 

回答

1

自变量的数量和表格都不会神奇地注入到你的insertData字符串,而你正在改变他们这是行不通的。 我最好的方法prepareInsertstatement(字符串表,串号),将返回正确的PreparedStatement:

public void prepareInsertStatement(Connection conn, Strint table, String number) { 
    String insertData = "INSERT INTO `database`.`"+table+"` 
    (`person_id`,`Date`,`amount+"number"') VALUES "+ 
    "(?,?,?) ON DUPLICATE KEY UPDATE " + 
    "`person_id` = ? , " + 
    "`Date` = ? , " + 
    "`amount+"number"' = ? ; "; 
    PreparedStatement insertDataStmt = conn.prepareStatement(insertData); 

    return insertDataStmt; 
} 

只记得关闭PreparesStatement当你不需要它了。

+0

很酷,这工作!非常感谢您的支持,并感谢您不要发布已经显示的错误! – user1636427

+0

很高兴你让它工作:) – kovica

0

我想这是无效的语法的原因。当您为最后一列名称连接字符串时,您使用代码'amount' + number。如果您的数字值为20,则连接结果将为 'amount'20,这会导致无效的语法异常。号码后再多加一个'

"'amount" + number + "'"

注:日志,或者只是错误此语句执行过程中出现将是非常有用的找到你的问题正确的答案。