Java到MySQL:如何使用变量中的值更新行?
我的数据库中有一个表Java到MySQL:如何使用变量中的值更新行?,java,mysql,sql,Java,Mysql,Sql,我的数据库中有一个表TotalSales,列为Date(主)和Sales。我通过Java程序发送查询 如果日期行不存在,我想添加一行,如果日期行存在,销售值将被更新。更新时,新的销售价值将为“当前销售价值”+“可变totalBill的价值” 假设在执行之前:Sales下的行=0, 执行后:Sales下的行=Sales+totalBill 我尝试了以下代码: String query = "INSERT INTO TotalSales (Date, Sales) VALUES(date, tota
TotalSales
,列为Date(主)和Sales。我通过Java程序发送查询
如果日期行不存在,我想添加一行,如果日期行存在,销售值将被更新。更新时,新的销售价值将为“当前销售价值”+“可变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'
有人能帮忙吗?您不是在insert查询中追加变量,而只是简单地使用字符串。因此,改变这一点:
String query = "INSERT INTO TotalSales (Date, Sales) VALUES(date, totalBill)
ON DUPLICATE KEY UPDATE Sales= VALUES(Sales)+VALUES(totalBill)";
到
建议:但是在这种情况下,您应该学会使用
PreparedStatement
您不是在insert查询中追加变量,而只是使用字符串。因此,改变这一点:
String query = "INSERT INTO TotalSales (Date, Sales) VALUES(date, totalBill)
ON DUPLICATE KEY UPDATE Sales= VALUES(Sales)+VALUES(totalBill)";
到
建议:但在这种情况下,您应该学会使用
PreparedStatement
您需要利用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);
比如说
查看更多详细信息您需要利用
PreparedStatement
s的参数化特性,并在执行语句之前绑定要应用的值,例如
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);
比如说
查看更多详细信息TotalSales表中是否有totalBill字段?无,它是程序中的一个变量。在这里,您可以查询totalBill表的列名。尝试修改它并使其成为数据绑定。顺便说一句,不要调用您的列
Date
。这是一个保留字,太笼统了。使用SaleDate
或类似方法。因此,您将该字符串query
发送到数据库引擎执行。当它尝试执行它时,它如何知道totalBill
的值?只有你的程序知道这一点。您需要使用参数化语句。当我键入一个答案时,程序员输入了一个答案,这就是我要说的。TotalSales表中是否有totalBill字段?无,这是程序中的一个变量。在这里,您可以查询totalBill表的列名。尝试修改它并使其成为数据绑定。顺便说一句,不要调用您的列Date
。这是一个保留字,太笼统了。使用SaleDate
或类似方法。因此,您将该字符串query
发送到数据库引擎执行。当它尝试执行它时,它如何知道totalBill
的值?只有你的程序知道这一点。您需要使用参数化语句。当我输入一个答案时,程序员把我要说的放进去。注意,st
需要是一个PreparedStatement
@turphile好吧,我假设preprestation
是分配给一个PreparedStatement
,它来自OP的代码,但很好!通过st.setString()我的数据都是字符串,而不是Sales=VALUES(Sales)+,它的销售额=销售额+?注意,st
需要是一个PreparedStatement
@turphile好吧,我假设prepreprestation
是分配给PreparedStatement
,它来自OP的代码,但很好!通过st.setString()我的数据都是字符串,而不是Sales=VALUES(Sales)+,它的销售额=销售额+?