在我的代码中,我试图实时同步表。例如:如果某个用户使用另一台设备使用此软件并在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();
}
}
}