我的数据库中有一个表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'
有人可以帮忙吗?
答案 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