通过java更新mysql数据库

时间:2012-02-01 12:28:23

标签: java mysql

我有一个程序会每隔一分钟更新一次。每次更新时,它都会添加时间,日期,需求,或者根据相同的时间和日期更新需求。但是,我目前的代码不允许我这样做。我已经尝试添加另一个代码来纠正这个问题,但它不起作用。有没有人知道如何添加约束,以便当它遇到相同的数据和时间,但需求不同时,它只会用新的需求更新数据库。而不是添加一个新行,其中包含相同的时间和日期但需求不同。

我的原始代码:

preparedStatement = connect
.prepareStatement("insert into  testdb.emcsg values (?, ?, ? , ?, ?)");
preparedStatement.setInt(1, count+1);
preparedStatement.setString(2, d1);
preparedStatement.setString(3, d2);
preparedStatement.setString(4, d3);
preparedStatement.setString(5, d4);
preparedStatement.executeUpdate();

我编辑的代码:

preparedStatement = connect
.prepareStatement("insert INTO testdb.emcsg values (?, ?, ? , ?, ?) ON DUPLICATE KEY UPDATE 5");
preparedStatement.setInt(1, count+1);
preparedStatement.setString(2, d1);
preparedStatement.setString(3, d2);
preparedStatement.setString(4, d3);
preparedStatement.setString(5, d4);
preparedStatement.executeUpdate();

此编辑的代码出现错误“您的SQL语法中有错误;”建议和帮助将不胜感激!

2 个答案:

答案 0 :(得分:3)

The documentation表明你必须在条款的末尾有一个作业:

insert into  testdb.emcsg (a, b, c, d, e) values (?, ?, ? , ?, ?) 
ON DUPLICATE KEY UPDATE e = ?

请注意,最好在insert语句中列出列名,而不是依赖于它们的定义顺序,并且要维护者知道此顺序。

答案 1 :(得分:0)

documentation看来,您可能需要引用要更新的列名。例如(a,b,c,d,e应替换为您的实际列名称):

preparedStatement = connect
.prepareStatement("insert INTO testdb.emcsg(a,b,c,d,e) values (?, ?, ? , ?, ?) ON DUPLICATE KEY UPDATE e=VALUES(e)");
preparedStatement.setInt(1, count+1);
preparedStatement.setString(2, d1);
preparedStatement.setString(3, d2);
preparedStatement.setString(4, d3);
preparedStatement.setString(5, d4);
preparedStatement.executeUpdate();