我正在编写与数据库(MySQL)交互的应用程序代码。我在Swing中使一切正常,可以使用数据库。
刷新代码:
最后,我写了一些代码来刷新JTable中的数据,以反映数据库中的实际数据。
这在这样的场景中很有用。如果我向JTable添加了新记录,通常会将此记录添加到基础数据库中。但是如果我添加了一个复制现有记录的记录,底层数据库将不会插入它,但它将显示在JTable中(在真实数据库中没有相应的记录)。
要刷新的代码具有从数据库获取新数据的作业。它工作正常,但它不影响(更新/刷新)表,直到我在JTable中的任何地方单击鼠标。
如何在不戳戳的情况下正确更新swing组件。
答案 0 :(得分:0)
"但是如果我添加了一个复制现有记录的记录,底层数据库将不会插入它,但它将显示在JTable中......如何正确更新swing组件戳它?"
PreparedStatemnt#executeUpdate()
- 返回int
,即数据库中更新的行数。如上所述,您可以检查结果是否为0.如果不是,则仅在插入成功时才将行添加到表中。像这样的东西
String text1 = textfield1.getText();
String text2 = textfield2.getText();
String text3 = textfield3.getText();
PreparedStatement ps = conn.prepareStatement("INSERT into table1 values (?, ?, ?)");
ps.setString(1, text1);
ps.setString(2, text2);
ps.setString(3, text3);
int result = ps.executeUpdate(); // check for rows affected
if (result != 0 ) { // only if result != 0 do we update the table
DefaultTableModel model = (DefaultTableModel)jTable.getModel();
Object[] row = { text1, text2, text3 };
model.addRow(row);
} else {
someStatusLabel.setText("That record already exists in the Database");
}
答案 1 :(得分:0)
如何在不戳戳的情况下正确更新swing组件。
访问数据库的代码应该在非EDT线程上完成,这样就不会阻止GUI响应事件。所以你可能应该使用SwingWorker来代码。然后发布结果,以便可以在EDT上更新模型。
阅读Concurrency上的Swing教程中的部分以获取更多信息。