Java到MySQL:如何使用变量中的值更新行?

时间:2014-10-07 05:18:18

标签: java mysql sql

我的数据库中有一个表TotalSales,其中包含Date(Primary)和Sales列。我通过我的Java程序发送查询。

如果Date行不存在,我想添加一行,如果Date行存在,则Sales上的值将更新。在更新时,Sales上的新值将是“Sales上的当前值”+“变量totalBill的值”。

让我们说执行之前:Sales = 0下的行,          执行后:Sales = Sales + totalBill;

下的行

我试过这段代码:

String query = "INSERT INTO TotalSales (Date, Sales) VALUES(date, totalBill)
                ON DUPLICATE KEY UPDATE Sales= VALUES(Sales)+VALUES(totalBill)";
st = con.prepareStatement(query);
st.execute();

但不起作用:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'totalBill' in 'field list'

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:3)

您需要利用PreparedStatement的参数化特性并在执行语句之前绑定要应用的值,例如......

String query = "INSERT INTO TotalSales (Date, Sales) VALUES(?, ?)
                    ON DUPLICATE KEY UPDATE Sales= VALUES(Sales)+?";
st = con.prepareStatement(query);
st.setDate(1, date);
st.setLong(2, totalBill);
st.setLong(3, totalBill);

例如

请查看Using Prepared Statements了解详情

答案 1 :(得分:1)

您不是将变量附加到插入查询,而只是使用字符串。所以改变这个:

String query = "INSERT INTO TotalSales (Date, Sales) VALUES(date, totalBill)
                ON DUPLICATE KEY UPDATE Sales= VALUES(Sales)+VALUES(totalBill)";

String query = "INSERT INTO TotalSales (Date, Sales) VALUES(" + date + "," + totalBill + ")
                ON DUPLICATE KEY UPDATE Sales= VALUES(Sales)+VALUES(totalBill)";

建议:但对于这种情况,您应该学会使用PreparedStatement