Иногда не синхронизирую таблицы в реальном времени

В моем коде я пытаюсь синхронизировать таблицу в режиме реального времени. Пример: Если пользователь, который использует это программное обеспечение, использует другое устройство и добавляет запись или изменяет запись в БД, то другой пользователь сможет увидеть ее, используя свою таблицу вида сетки устройства.

В моей базе данных у меня есть столбец с именем "updDate" для каждой строки для хранения текущего "datetime", когда пользователь обновляет одну из своих записей в БД. Я использую два списка типа String для хранения '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();
    }

 }

}

0 ответов

Другие вопросы по тегам