Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java到MySQL:如何使用变量中的值更新行?_Java_Mysql_Sql - Fatal编程技术网

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)+,它的销售额=销售额+?