2015-09-30 6 views
0

У меня есть метод, который сохраняет некоторые записи для машины в таблице. Тем не менее, я могу вставить случайно несколько раз записи для одного и того же компьютера за один день, поэтому я хочу, чтобы на этот день я сохранил самую новую вставку и отбросил старые. Я думал, что одно решение:Вставьте значение newset в таблицу и отбросьте старые

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

Есть ли лучше/умное решение от этого, так что я могу сделать все тезисы действия в том же методе?

+0

MySQL или SQLite? Они разные DMS, и решение может быть другим. – Pred

+0

@Pred Это sqlite. – yaylitzis

+1

Смотрите этот вопрос: http://stackoverflow.com/questions/2717590/sqlite-upsert-on-duplicate-key-update – Pred

ответ

1

С уникальным индексом (возможно, первичный ключ) на date и idmachine вы будете использовать INSERT ... ON DUPLICATE KEY UPDATE, чтобы вставить, когда нет записи для этой машины в тот же день или обновить существующую запись с новыми данными иначе.

insert into machines_records 
    (machineid, date, data) 
values 
    (@id, @date, @data) 
on duplicate key update data = @data; 

EDIT: Я вижу, что вы удалили тег MySQL. Поэтому вам нужен ответ для SQLite. В SQLite вы используете INSERT OR REPLACE:

insert or replace into machines_records 
    (machineid, date, data) 
values 
    (@id, @date, @data); 

 Смежные вопросы

  • Нет связанных вопросов^_^