将newset值插入表中并删除旧值

时间:2015-09-30 08:37:11

标签: sqlite javadb

我有一个方法可以保存表中某台机器的某些记录。但是,我可能会在一天内多次插入同一台机器的记录,因此我希望这一天保存最新的插件并删除旧的插件。我想了一个解决方案:

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();
  }

有没有更好/最聪明的解决方案,所以我可以用同样的方法做所有这些动作?

1 个答案:

答案 0 :(得分:1)

使用dateidmachine上的唯一索引(可能是主键),您将使用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);