Вы действительно зависите от того, поддерживает ли соответствующая база данных.Вы также должны принять во внимание накладные расходы.Много вставок / обновлений также означает большое количество уведомлений, и ваш Java-код должен обрабатывать их последовательно, иначе он будет пузыриться.
Если модель данных позволяет это сделать, просто добавьте дополнительный столбец, содержащий метку времени, которая получаетобновляется при каждой вставке / обновлении.Большинство основных БД поддерживает автоматическое обновление столбца при каждой вставке / обновлении.Я не знаю, какой сервер БД вы используете, поэтому приведу только пример для MySQL:
CREATE TABLE mytable (
id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
somevalue VARCHAR(255) NOT NULL,
lastupdate TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX (lastupdate)
)
Таким образом, вам не нужно беспокоиться о вставке / обновлении * 1006.* сам.Вы можете просто сделать INSERT INTO mytable (somevalue) VALUES (?)
или UPDATE mytable SET somevalue = ? WHERE id = ?
, и БД сделает волшебство.
Убедившись, что время сервера БД и время приложения Java одинаковы, вы можете просто запустить фоновый поток (используялибо Timer
с TimerTask
, либо ScheduledExecutorService
с Runnable
или Callable
) что примерно так:
Date now = new Date();
statement = connection.prepareStatement("SELECT id FROM mytable WHERE lastupdate BETWEEN ? AND ?");
statement.setDate(1, this.lastTimeChecked);
statement.setDate(2, now);
resultSet = statement.executeQuery();
while (resultSet.next()) {
// Handle accordingly.
}
this.lastTimeChecked = now;
Обновление : согласно обновлению вопроса выясняется, что у вас нет контроля над БД.Ну, тогда у вас не так много хороших / эффективных вариантов.Либо просто обновите весь список в памяти Java всеми данными из БД без проверки / сравнения изменений (вероятно, самый быстрый способ), либо динамически сгенерируйте запрос SQL на основе текущих данных, который исключает текущие данные из результатов.