0

我有以下问题:我在一个数据库中有两个表,除了最后一列的名称之外,它们还包含相同的列。我想使用 Java 将数据写入它们。我想对两个表使用相同的preparedStatement,在其中我使用if 命令检查它是table1 还是2。2table作为最后一列的名称,1作为它的名称。这存储在我的代码中的一个变量中。tableamount10tableamount20number

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

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

2 回答 2

1

这将不起作用,因为变量 number 和 table 在您更改它们时不会神奇地注入到您的 insertData 字符串中。我想要一个方法 prepareInsertstatement(String table, String number) 来返回正确的 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。

于 2012-09-14T11:54:14.497 回答
0

我想那是无效的语法。当您连接最后一列名称的字符串时,您使用 code 'amount' + number。如果您的数字值为 20,则 concat 结果将 'amount'20导致无效语法异常。只需'在数字后移动一位。

"'amount" + number + "'"

注意:在此语句执行期间出现的日志或仅出现错误对于为您的问题找到正确答案非常有用。

于 2012-09-14T11:55:24.813 回答