Иногда не синхронизирую таблицы в реальном времени - PullRequest
0 голосов
/ 02 октября 2018

В своем коде я пытаюсь синхронизировать таблицу в режиме реального времени.Пример: Если пользователь, который использует это программное обеспечение, использует другое устройство и добавляет запись или изменяет запись в 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();
    }

 }

}
...