Проверка на повторяющуюся информацию, запрошенную в БД
Имеется приложение, которое отображает результат селекта из таблицы, которая находится в базе данных Оракл. Каждый три секунды запрос повторяется и в приложении вновь появляются те же самые записи. Напрягает, что таблица моргает каждые 3 секунды когда обновляет строки, а данные в них те же. Хочется чтобы таблица автоматически обновлялась в приложении только тогда, когда результат селекта будет с изменениями. Вот приложение (запрос вверху приложения):

так же прикладываю код в котором происходит запрос к базе данных и наполняется таблица JTable - DefaultTableModel с результатами селекта. Как сделать проверку на то, что данные те же и не надо заполнять Jtable теми же записями каждые 3 секунды, а только если будет хотя бы одно изменение в этих же трёх секундах? В таблице БД у каждой строки свой уникальный id, который я здесь не использовал..
static void select() {
try {
PreparedStatement st = connect.prepareStatement(
Gui.JStatement.getText() + where_clause +
" AND fl_text LIKE '" + Gui.likeTextField.getText() +
"' ORDER BY " + order_by + " " + sorting);
ResultSet rs = st.executeQuery();
while (rs.next()) {
amount = Gui.model.getRowCount() + 1;
String fl_date = rs.getString("fl_date");
String fl_text = rs.getString("fl_text");
Object[] row = new Object[]{
amount,
fl_date,
fl_text
};
Gui.model.addRow(row);
}
st.close();
Ответы (1 шт):
Сделано 2 запроса max(id) к базе данных с разницей в 1000 миллисекунд и если max(id) не равны - выполняю нужный код.
Statement statement = connect.createStatement();
String sql = "select max(fl_id) from fs_log where fl_date > sysdate - " + where_clause;
ResultSet rs_id = statement.executeQuery(sql);
if (rs_id.next()) {
max = rs_id.getInt(1);
} statement.close();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Statement statement2 = connect.createStatement();
String sql2 = "select max(fl_id) from fs_log where fl_date > sysdate - " + where_clause;
ResultSet rs_id2 = statement2.executeQuery(sql2);
if (rs_id2.next()) {
max2 = rs_id2.getInt(1);
} statement2.close();
if(max != max2){код по заполнению}