在 table 中插入新值并删除旧值
Insert the newset value in a table and drop the old ones
我有一个方法可以在 table 中为机器保存一些记录。但是,我可能会在一天内意外多次插入同一台机器的记录,所以我想在这一天保存最新的插入并删除旧的。我想到了一个解决方案:
String sq = "SELECT date, idMachine "
+ "FROM MACHINES_RECORDS WHERE date = ? AND idMachine = ?";
try {
Class.forName(typeDB);
c = DriverManager.getConnection(path);
stm = c.prepareStatement(sq);
ResultSet rs = stm.executeQuery();
if (rs.next()) {
do {
//call an another method to drop this value
} while(rs.next());
}else {
//call an another method to insert this value
}
}catch (SQLException e) {
System.out.println(e.getMessage());
} finally {
if (stm != null)
stm.close();
if (c != null)
c.close();
}
是否有任何better/smartest解决方案,以便我可以用相同的方法完成所有这些操作?
在 date
和 idmachine
上使用唯一索引(可能是主键),您将使用 INSERT ... ON DUPLICATE KEY UPDATE
,以便在该机器上没有条目时插入天或用新数据更新现有记录。
insert into machines_records
(machineid, date, data)
values
(@id, @date, @data)
on duplicate key update data = @data;
编辑: 我看到你删除了 MySQL 标签。所以你想要 SQLite 的答案。在 SQLite 中你会使用 INSERT OR REPLACE
:
insert or replace into machines_records
(machineid, date, data)
values
(@id, @date, @data);
我有一个方法可以在 table 中为机器保存一些记录。但是,我可能会在一天内意外多次插入同一台机器的记录,所以我想在这一天保存最新的插入并删除旧的。我想到了一个解决方案:
String sq = "SELECT date, idMachine "
+ "FROM MACHINES_RECORDS WHERE date = ? AND idMachine = ?";
try {
Class.forName(typeDB);
c = DriverManager.getConnection(path);
stm = c.prepareStatement(sq);
ResultSet rs = stm.executeQuery();
if (rs.next()) {
do {
//call an another method to drop this value
} while(rs.next());
}else {
//call an another method to insert this value
}
}catch (SQLException e) {
System.out.println(e.getMessage());
} finally {
if (stm != null)
stm.close();
if (c != null)
c.close();
}
是否有任何better/smartest解决方案,以便我可以用相同的方法完成所有这些操作?
在 date
和 idmachine
上使用唯一索引(可能是主键),您将使用 INSERT ... ON DUPLICATE KEY UPDATE
,以便在该机器上没有条目时插入天或用新数据更新现有记录。
insert into machines_records
(machineid, date, data)
values
(@id, @date, @data)
on duplicate key update data = @data;
编辑: 我看到你删除了 MySQL 标签。所以你想要 SQLite 的答案。在 SQLite 中你会使用 INSERT OR REPLACE
:
insert or replace into machines_records
(machineid, date, data)
values
(@id, @date, @data);