В своем коде я пытаюсь синхронизировать таблицу в режиме реального времени.Пример: Если пользователь, который использует это программное обеспечение, использует другое устройство и добавляет запись или изменяет запись в db, то другой пользователь сможет увидеть ее, используя свою таблицу представления сетки устройства.
В моей базе данныхУ меня есть столбец с именем «updDate» для каждой строки для хранения текущего «datetime», когда пользователь обновляет одну из своих записей в БД.Я использую два списка строковых типов для хранения 'updDate' для получения значений из БД каждые 4 секунды с использованием таймера.
два списка строковых типов ... 01. 'initialArray' 02. 'actualArray'
' initialArray 'вызывается при запуске программы, а сохранение значений в' actualArray 'вызывается с использованием пользовательского имени функции updateTableRecords ().Функция initTableRecords () используется для первоначального присвоения значений, а updateTableRecords () вызывается каждые 4 секунды, чтобы проверить, было ли изменено значение для updDate для синхронизации таблиц.«showTable» - это функция, которую я использовал для отображения «dataGridView», и она отлично работает.
Мой код иногда работает, а иногда и не работает (не синхронизирует таблицы).Я не могу понять проблему.Вот мой код ...
public class notify extends javax.swing.JFrame {
List<String> initialArr = new ArrayList<String>();
List<String> actualArr = new ArrayList<String>();
public notify() {
initTableRecords();
syncTable();
public void syncTable() {
Timer t = new Timer(4000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
updateTableRecords();
}
});
t.start();
}
public void initTableRecords() {
Connection conn = new ConnectorNew().ConnectorNew();
query1 = "select * from notify_prod";
try {
stmt1 = conn.createStatement();
rs1 = stmt1.executeQuery(query1);
while (rs1.next()) {
initialArr.add(rs1.getString("updDate")) ;
}
conn.close();
}
catch (SQLException ex) {
JOptionPane.showMessageDialog(null, "Something went wrong", "Error",
JOptionPane.ERROR_MESSAGE);
ex.printStackTrace();
} catch (Exception ex) {
ex.printStackTrace();
}
}
public void updateTableRecords() {
Connection conn = new ConnectorNew().ConnectorNew();
query1 = "select * from notify_prod";
try {
stmt1 = conn.createStatement();
rs1 = stmt1.executeQuery(query1);
actualArr.clear();
while (rs1.next()) {
actualArr.add(rs1.getString("updDate")) ;
}
if(initialArr.size() != actualArr.size()) {
initialArr.clear();
initTableRecords();
}
for(int i=0; i<actualArr.size(); i++) {
if( !(actualArr.get(i).equals(initialArr.get(i))) ) {
DefaultTableModel model = (DefaultTableModel)notPr_table.getModel();
model.setRowCount(0);
showTable();
initialArr.clear();
initTableRecords();
}
}
conn.close();
}
catch (SQLException ex) {
JOptionPane.showMessageDialog(null, "Something went wrong", "Error",
JOptionPane.ERROR_MESSAGE);
ex.printStackTrace();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}