有时不实时同步表

时间:2018-10-02 16:58:30

标签: synchronization real-time

在我的代码中,我试图实时同步表。例如:如果某个用户使用另一台设备使用此软件并在db中添加了一条记录或修改了一条记录,那么其他用户将可以使用其设备网格视图表查看该记录。

在我的数据库中,每行都有一个名为“ updDate”的列,用于在用户对其数据库中的一条记录进行更新时存储当前的“ datetime”。我正在使用两个String类型列表存储'updDate',以便使用计时器每4秒从DB中获取值。

两个String类型列表...      01.'initialArray'      02.'actualArray'

'initialArray'在程序启动时被调用,并且使用自定义函数名称'updateTableRecords()'将值存储到'actualArray'中。 “ 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 个答案:

没有答案