我应该将我的csv文件中的数据添加到我的数据库中。我没有问题将数据添加到数据库中,但是,我的情况是我的java程序必须添加新值或将当前值更新到数据库中,比如在我的列“date”下。当我的当前数据库中未标识新数据时,将添加该数据。但是,在同一行下,有一个名为“需求”的列。如果日期相同但需求不同。它必须更新。目前,我的脚本只能从mysql中逐行检索数据,并与从csv文件中收集的数据进行比较。当日期不同时,它可以将数据添加到新行中。问题是我创建的java程序只能从头开始逐行读取。我会重复数据,因为它从最早的数据到最新的数据开始比较。例如,我最早的日期是01 jan,它与我的csv数据比较31 jan。但是,我后来的条目已经存储了31日元。但我的java程序继续添加这些数据,因为它从一开始就进行了比较。如果您需要更多信息,我会更详细地解释。
public void readDataBase(int val, String d1, String d2, String d3, String d4 ) throws Exception {
try {
Class.forName("com.mysql.jdbc.Driver");
connect = DriverManager.getConnection("jdbc:mysql://localhost/testdb?"
+ "user=root&password=");
statement = connect.createStatement();
resultSet = statement.executeQuery("SELECT COUNT(*) FROM testdb.amg");
while (resultSet.next()) {
total = resultSet.getInt(1);
}
resultSet = statement.executeQuery("select * from testdb.amg");
try{
int id;
String Date,Demand;
while (resultSet.next()) {
id = resultSet.getInt("id");
Date = resultSet.getString("Date");
Demand = resultSet.getString("Demand");
System.out.println("total: " + total);
System.out.println("d4: " + d4);
if (!Date.equals(d1) && !Demand.equals(d3))
{
int val1 = total +1;
preparedStatement = connect
.prepareStatement("insert into testdb.amg values (?, ? ?)");
preparedStatement.setInt(1, val1);
preparedStatement.setString(2, d1);
preparedStatement.setString(3, d3);
preparedStatement.executeUpdate();
System.out.println("UpdatedII");
}
答案 0 :(得分:3)
标识数据库中的不同列(date + demand + whatever_is_distinct)并在该组合上定义UNIQUE约束。
通过这样做,在插入期间,如果存在任何抛出的Constraint Violation异常,则更新该记录或者插入记录。
答案 1 :(得分:1)
正如Rocky所说,定义桌面上的唯一键。由于数据库是MySQL,您可以通过INSERT简单查询实现您想要的... ON DUPLICATE KEY UPDATE ... INSERT ... ON DUPLICATE KEY UPDATE Syntax
在你的情况下,它可以是
insert into testdb.amg values (?, ? ?) on duplicate key update <update fields here>
所以最后的查询应该是
"insert into testdb.amg values (?, ?, ?) on duplicate key update Demand=?"
并添加
preparedStatement.setString(4, d3);