我使用MySQL數據庫創建了一個Java通訊錄程序。我的程序有左側面板和右側面板。左側面板將新條目寫入數據庫,右側面板顯示所有數據庫信息。我在向數據庫提交新條目後更新程序時遇到問題。我必須關閉我的程序,然後重新打開它以顯示新的信息。向數據庫提交信息後刷新java程序
點擊提交按鈕後,我怎樣才能讓自己的地址簿更新?
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.swing.*;
@SuppressWarnings("serial")
public class Frame1 extends JFrame {
JLabel label1 = new JLabel("Address Book Input");
JLabel label2 = new JLabel("MySQL Address Book");
JButton submit = new JButton("Submit");
JTextField $first_name = new JTextField(20);
JTextField $last_name = new JTextField(20);
JTextField $phone = new JTextField(20);
JTextField $email = new JTextField(20);
JTextField $street = new JTextField(20);
JTextField $city = new JTextField(20);
JTextField $state = new JTextField(20);
JTextField $zip = new JTextField(20);
JLabel first_nameLabel = new JLabel("First Name: ");
JLabel last_nameLabel = new JLabel("Last Name: ");
JLabel phoneLabel = new JLabel("Phone: ");
JLabel emailLabel = new JLabel("Email: ");
JLabel streetLabel = new JLabel("Street: ");
JLabel cityLabel = new JLabel("City: ");
JLabel stateLabel = new JLabel("State: ");
JLabel zipLabel = new JLabel("Zip: ");
public Frame1() {
super("1 Class Template");
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(800, 480);
setLocationRelativeTo(null);
setVisible(true);
initComponents();
}
public void initComponents() {
JPanel panel = new JPanel(new GridLayout(0, 2));
JPanel panelLeft = new JPanel(new GridBagLayout());
JPanel panelRight = new JPanel(new BorderLayout());
JScrollPane scrollPane = new JScrollPane();
JPanel addressBook = new JPanel(new GridBagLayout());
add(panel);
panel.add(panelLeft);
panel.add(panelRight);
panelRight.add(scrollPane);
scrollPane.setViewportView(addressBook);
panelLeft.setBorder(BorderFactory.createLineBorder(Color.black));
panelRight.setBorder(BorderFactory.createLineBorder(Color.black));
GridBagConstraints gbc = new GridBagConstraints();
label1.setFont(new Font(null, Font.PLAIN, 18));
gbc.insets = new Insets(8, 8, 8, 8);
gbc.gridwidth = 2;
gbc.anchor = GridBagConstraints.CENTER;
gbc.gridx = 0;
gbc.gridy = 0;
panelLeft.add(label1, gbc);
gbc.insets = new Insets(4, 4, 4, 4);
gbc.gridwidth = 1;
gbc.anchor = GridBagConstraints.LINE_END;
gbc.gridx = 0;
gbc.gridy++;
panelLeft.add(first_nameLabel, gbc);
gbc.gridy++;
panelLeft.add(last_nameLabel, gbc);
gbc.gridy++;
panelLeft.add(phoneLabel, gbc);
gbc.gridy++;
panelLeft.add(emailLabel, gbc);
gbc.gridy++;
panelLeft.add(streetLabel, gbc);
gbc.gridy++;
panelLeft.add(cityLabel, gbc);
gbc.gridy++;
panelLeft.add(stateLabel, gbc);
gbc.gridy++;
panelLeft.add(zipLabel, gbc);
gbc.insets = new Insets(4, 4, 4, 4);
gbc.gridwidth = 1;
gbc.anchor = GridBagConstraints.LINE_START;
gbc.gridx = 1;
gbc.gridy = 1;
panelLeft.add($first_name, gbc);
gbc.gridy++;
panelLeft.add($last_name, gbc);
gbc.gridy++;
panelLeft.add($phone, gbc);
gbc.gridy++;
panelLeft.add($email, gbc);
gbc.gridy++;
panelLeft.add($street, gbc);
gbc.gridy++;
panelLeft.add($city, gbc);
gbc.gridy++;
panelLeft.add($state, gbc);
gbc.gridy++;
panelLeft.add($zip, gbc);
gbc.insets = new Insets(4, 4, 4, 4);
gbc.anchor = GridBagConstraints.LINE_END;
gbc.gridwidth = 1;
gbc.gridx = 1;
gbc.gridy++;
submit.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
try {
java.sql.Connection myConn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/database_name",
"user_name", "password");
Statement myStmt = myConn.createStatement();
myStmt
.executeUpdate("INSERT INTO address_book (first_name, last_name, phone, email, street, city, state, zip) VALUES ('"
+ $first_name.getText()
+ "', '"
+ $last_name.getText()
+ "', '"
+ $phone.getText()
+ "', '"
+ $email.getText()
+ "', '"
+ $street.getText()
+ "', '"
+ $city.getText()
+ "', '"
+ $state.getText()
+ "', '"
+ $zip.getText() + "') ");
$first_name.setText("");
$last_name.setText("");
$phone.setText("");
$email.setText("");
$street.setText("");
$city.setText("");
$state.setText("");
$zip.setText("");
JOptionPane.showConfirmDialog(null,
"Your Data Has been Inserted", "Result",
JOptionPane.DEFAULT_OPTION,
JOptionPane.PLAIN_MESSAGE);
}
catch (Exception exc) {
exc.printStackTrace();
}
}
});
panelLeft.add(submit, gbc);
label2.setFont(new Font(null, Font.PLAIN, 18));
gbc.insets = new Insets(8, 8, 8, 8);
gbc.gridwidth = 2;
gbc.anchor = GridBagConstraints.CENTER;
gbc.gridx = 0;
gbc.gridy = 0;
addressBook.add(label2, gbc);
gbc.anchor = GridBagConstraints.LINE_START;
gbc.gridwidth = 1;
try {
java.sql.Connection myConn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/database_name", "user_name",
"password");
Statement myStmt = myConn.createStatement();
ResultSet myRs = myStmt
.executeQuery("SELECT * FROM address_book ORDER BY last_name, first_name");
while (myRs.next()) {
JLabel lab1 = new JLabel(myRs.getString("first_name") + " "
+ myRs.getString("last_name"));
JLabel lab2 = new JLabel(myRs.getString("phone"));
JLabel lab3 = new JLabel(myRs.getString("email"));
JLabel lab4 = new JLabel(myRs.getString("street"));
JLabel lab5 = new JLabel(myRs.getString("city") + ", "
+ myRs.getString("state") + " " + myRs.getString("zip"));
gbc.insets = new Insets(4, 4, 4, 4);
gbc.gridy++;
addressBook.add(lab1, gbc);
gbc.gridy++;
addressBook.add(lab2, gbc);
gbc.gridy++;
addressBook.add(lab3, gbc);
gbc.gridy++;
addressBook.add(lab4, gbc);
gbc.insets = new Insets(4, 4, 20, 4);
gbc.gridy++;
addressBook.add(lab5, gbc);
}
}
catch (Exception exc) {
exc.printStackTrace();
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new Frame1();
}
});
}
}
相信SQL注入先生。就像您閱讀並填寫面板以顯示數據一樣,在插入數據結束時執行相同的操作。如果後端數據庫可以通過數據插入事件(觸發器)執行任何額外操作,則重新加載整個顯示面板可以讓您更好地瞭解更新的數據。 –
分離您的責任區域,使UI與數據和數據管理分離,這意味着當您想要更新數據時,您可以向UI詢問並更新它,並以您想要的方式更新要更新UI,您需要傳遞它所需的數據 – MadProgrammer
@MadProgrammer您會以什麼樣的方式將UI與數據分開?我沒有任何運氣 –