我有一个页面(Swing GUI),其中根据某些条件在其中显示数据。页面加载后,页面将从DB中获取数据并在GUI中显示数据。现在,如果数据库中有任何更改,我希望更改能够立即反映在我的GUI中,而无需运行/重新加载/刷新。任何想法如何实现此功能。我正在使用JDBC连接...谨此建议...注意:我不想运行Java代码或刷新页面,数据应自动更新。预先感谢
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Timer;``
import java.util.TimerTask;
import javax.swing.*;
import DemoDBConn.MysqlConnection;
@SuppressWarnings("serial")
class GUI extends JFrame
{
Connection connection=null;
public GUI()
{
JFrame jf = new JFrame();
JLayeredPane LPane = new JLayeredPane();
jf.getContentPane() .add(LPane);
ImageIcon i = new ImageIcon(GUI.class.getResource("/images/background4.gif"));
JLabel background = new JLabel();
background.setIcon(i);
background.setBounds(0, 0, 1024, 768);
JLabel flight = new JLabel();
flight.setIcon(new ImageIcon(GUI.class.getResource("/images/acs_md_dis.png")));
flight.setBounds(270, 0, 800, 768);
JLabel seat1 = new JLabel();
seat1.setIcon(new ImageIcon(GUI.class.getResource("/images/acSymAmberInd.png")));
seat1.setBounds(320, 230, 10, 20);
JLabel seat2 = new JLabel();
seat2.setIcon(new ImageIcon(GUI.class.getResource("/images/acSymAmberInd.png")));
seat2.setBounds(370, 230, 10, 20);
JLabel seat3 = new JLabel();
seat3.setIcon(new ImageIcon(GUI.class.getResource("/images/acSymAmberInd.png")));
seat3.setBounds(320, 280, 10, 20);
JLabel seat4 = new JLabel();
seat4.setIcon(new ImageIcon(GUI.class.getResource("/images/acSymAmberInd.png")));
seat4.setBounds(370, 280, 10, 20);
LPane.add(background, new Integer(1));
LPane.add(flight, new Integer(2));
LPane.add(seat1, new Integer(3));
LPane.add(seat2, new Integer(3));
LPane.add(seat3, new Integer(3));
LPane.add(seat4, new Integer(3));
try {
String query ="Select * from passengersdetails";
connection = MysqlConnection.dbConnector();
PreparedStatement pst= connection.prepareStatement(query);
ResultSet rs= pst.executeQuery();
while(rs.next()){
if(rs.getString("seateNumber").equals("A1")){
if(rs.getString("status").equals("OK")){
seat1.setIcon(new ImageIcon(
GUI.class.getResource("/images/acSymGreenInd.png")));
}
else if(rs.getString("status").equals("NOT OK")){
}
else{
}
}
else if(rs.getString("seateNumber").equals("A2")){
if(rs.getString("status").equals("OK")){
seat2.setIcon(new ImageIcon(
GUI.class.getResource("/images/acSymGreenInd.png")));
}
else if(rs.getString("status").equals("NOT OK")){
}
else{
}
}
else if(rs.getString("seateNumber").equals("A3")){
if(rs.getString("status").equals("OK")){
seat3.setIcon(new ImageIcon(
GUI.class.getResource("/images/acSymGreenInd.png")));
}
else if(rs.getString("status").equals("NOT OK")){
}
else{
}
}
else if(rs.getString("seateNumber").equals("A4")){
if(rs.getString("status").equals("OK")){
seat4.setIcon(new ImageIcon(
GUI.class.getResource("/images/acSymGreenInd.png")));
}
else if(rs.getString("status").equals("NOT OK")){
}
else{
}
}
}
}
catch (Exception e) {
e.printStackTrace();
}
jf.setDefaultCloseOperation(jf.EXIT_ON_CLOSE);
jf.setSize(1024,768);
jf.setResizable(false);
jf.setVisible(true);
}
public static void main(String args[])
{
GUI gui = new GUI();
}
}
答案 0 :(得分:2)
别做梦了。
DBMS引擎以一种“一问一答”的方式回答问题(查询)。问题回答了吗?任务完成。就是这样。它们不存在,无法跟踪哪个用户问了哪个问题,并且只要其他任何人对数据库进行的其他任何更新都影响了问题的给定答案,就希望得到通知。
实际上,如果您的查询是一个涉及关系代数的各种运算符的成熟关系表达式,那么甚至不存在任何引擎会知道如何计算这些东西[足够有效,整个机器不会立即出现停止所有需要的计算]。