帮我编写Java swing mysql通讯录管理系统代码
时间: 2024-05-04 19:20:06 浏览: 9
很高兴为您提供Java swing mysql通讯录管理系统的示例代码。本示例包含了基本的增删改查操作,使用了MySQL作为数据存储后端。请注意,本示例仅供参考,实际使用时需要根据自己的需求进行适当修改和优化。
以下是示例代码:
```java
import java.sql.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class AddressBook extends JFrame implements ActionListener {
// 数据库连接信息
private final String DB_URL = "jdbc:mysql://localhost:3306/addressbook";
private final String DB_USER = "root";
private final String DB_PASSWORD = "password";
// UI 元素定义
private JTextField tfName, tfAddress, tfPhone;
private JButton btnAdd, btnUpdate, btnDelete, btnSearch;
private JTable tblResult;
private DefaultTableModel tblModel;
// 数据库连接对象和操作语句对象
private Connection conn;
private Statement stmt;
public AddressBook() {
// 初始化 UI 元素
tfName = new JTextField(20);
tfAddress = new JTextField(20);
tfPhone = new JTextField(20);
btnAdd = new JButton("添加");
btnUpdate = new JButton("更新");
btnDelete = new JButton("删除");
btnSearch = new JButton("查找");
tblModel = new DefaultTableModel();
tblResult = new JTable(tblModel);
JPanel pnlInput = new JPanel(new GridLayout(3, 2));
pnlInput.add(new JLabel("姓名:"));
pnlInput.add(tfName);
pnlInput.add(new JLabel("地址:"));
pnlInput.add(tfAddress);
pnlInput.add(new JLabel("电话:"));
pnlInput.add(tfPhone);
JPanel pnlButtons = new JPanel(new FlowLayout());
pnlButtons.add(btnAdd);
pnlButtons.add(btnUpdate);
pnlButtons.add(btnDelete);
pnlButtons.add(btnSearch);
JPanel pnlMain = new JPanel(new BorderLayout());
pnlMain.add(pnlInput, BorderLayout.NORTH);
pnlMain.add(new JScrollPane(tblResult), BorderLayout.CENTER);
pnlMain.add(pnlButtons, BorderLayout.SOUTH);
setContentPane(pnlMain);
// 设置 UI 元素事件监听器
btnAdd.addActionListener(this);
btnUpdate.addActionListener(this);
btnDelete.addActionListener(this);
btnSearch.addActionListener(this);
tblResult.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
int row = tblResult.getSelectedRow();
if (row >= 0) {
tfName.setText((String)tblModel.getValueAt(row, 0));
tfAddress.setText((String)tblModel.getValueAt(row, 1));
tfPhone.setText((String)tblModel.getValueAt(row, 2));
}
}
});
// 初始化数据库连接和操作语句对象
try {
conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);
stmt = conn.createStatement();
} catch (SQLException ex) {
JOptionPane.showMessageDialog(this, "无法连接数据库:" + ex.getMessage(), "错误", JOptionPane.ERROR_MESSAGE);
System.exit(1);
}
// 初始化表格数据
tblModel.addColumn("姓名");
tblModel.addColumn("地址");
tblModel.addColumn("电话");
loadTableData();
}
// 加载表格数据
private void loadTableData() {
try {
ResultSet rs = stmt.executeQuery("SELECT * FROM addressbook");
while (rs.next()) {
tblModel.addRow(new Object[] { rs.getString("name"), rs.getString("address"), rs.getString("phone") });
}
rs.close();
} catch (SQLException ex) {
JOptionPane.showMessageDialog(this, "无法读取数据:" + ex.getMessage(), "错误", JOptionPane.ERROR_MESSAGE);
System.exit(1);
}
}
// 清除输入框内容
private void clearInput() {
tfName.setText("");
tfAddress.setText("");
tfPhone.setText("");
}
// 添加数据
private void addData() {
String name = tfName.getText().trim();
String address = tfAddress.getText().trim();
String phone = tfPhone.getText().trim();
if (name.isEmpty() || address.isEmpty() || phone.isEmpty()) {
JOptionPane.showMessageDialog(this, "姓名、地址和电话不能为空!", "错误", JOptionPane.ERROR_MESSAGE);
return;
}
try {
stmt.executeUpdate("INSERT INTO addressbook (name, address, phone) VALUES ('" + name + "', '" + address + "', '" + phone + "')");
tblModel.addRow(new Object[] { name, address, phone });
clearInput();
} catch (SQLException ex) {
JOptionPane.showMessageDialog(this, "无法添加数据:" + ex.getMessage(), "错误", JOptionPane.ERROR_MESSAGE);
}
}
// 更新数据
private void updateData() {
int row = tblResult.getSelectedRow();
if (row < 0) {
JOptionPane.showMessageDialog(this, "请先选择一条数据!", "错误", JOptionPane.ERROR_MESSAGE);
return;
}
String name = tfName.getText().trim();
String address = tfAddress.getText().trim();
String phone = tfPhone.getText().trim();
if (name.isEmpty() || address.isEmpty() || phone.isEmpty()) {
JOptionPane.showMessageDialog(this, "姓名、地址和电话不能为空!", "错误", JOptionPane.ERROR_MESSAGE);
return;
}
try {
stmt.executeUpdate("UPDATE addressbook SET name='" + name + "', address='" + address + "', phone='" + phone + "' WHERE name='" + tblModel.getValueAt(row, 0) + "'");
tblModel.setValueAt(name, row, 0);
tblModel.setValueAt(address, row, 1);
tblModel.setValueAt(phone, row, 2);
clearInput();
} catch (SQLException ex) {
JOptionPane.showMessageDialog(this, "无法更新数据:" + ex.getMessage(), "错误", JOptionPane.ERROR_MESSAGE);
}
}
// 删除数据
private void deleteData() {
int row = tblResult.getSelectedRow();
if (row < 0) {
JOptionPane.showMessageDialog(this, "请先选择一条数据!", "错误", JOptionPane.ERROR_MESSAGE);
return;
}
try {
stmt.executeUpdate("DELETE FROM addressbook WHERE name='" + tblModel.getValueAt(row, 0) + "'");
tblModel.removeRow(row);
clearInput();
} catch (SQLException ex) {
JOptionPane.showMessageDialog(this, "无法删除数据:" + ex.getMessage(), "错误", JOptionPane.ERROR_MESSAGE);
}
}
// 查找数据
private void searchData() {
String name = tfName.getText().trim();
String address = tfAddress.getText().trim();
String phone = tfPhone.getText().trim();
String where = "";
if (!name.isEmpty()) {
where += "name='" + name + "'";
}
if (!address.isEmpty()) {
if (!where.isEmpty()) {
where += " AND ";
}
where += "address='" + address + "'";
}
if (!phone.isEmpty()) {
if (!where.isEmpty()) {
where += " AND ";
}
where += "phone='" + phone + "'";
}
if (where.isEmpty()) {
JOptionPane.showMessageDialog(this, "请输入至少一个查询条件!", "错误", JOptionPane.ERROR_MESSAGE);
return;
}
try {
ResultSet rs = stmt.executeQuery("SELECT * FROM addressbook WHERE " + where);
tblModel.setRowCount(0);
while (rs.next()) {
tblModel.addRow(new Object[] { rs.getString("name"), rs.getString("address"), rs.getString("phone") });
}
rs.close();
clearInput();
} catch (SQLException ex) {
JOptionPane.showMessageDialog(this, "无法查询数据:" + ex.getMessage(), "错误", JOptionPane.ERROR_MESSAGE);
}
}
// 处理按钮点击事件
public void actionPerformed(ActionEvent e) {
if (e.getSource() == btnAdd) {
addData();
} else if (e.getSource() == btnUpdate) {
updateData();
} else if (e.getSource() == btnDelete) {
deleteData();
} else if (e.getSource() == btnSearch) {
searchData();
}
}
public static void main(String[] args) {
AddressBook app = new AddressBook();
app.setSize(600, 400);
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
app.setVisible(true);
}
}
```
在上面的示例代码中,我们使用了Java Swing组件创建了一个简单的通讯录管理系统,包括姓名、地址和电话三个字段。我们使用了MySQL作为数据存储后端,并使用JDBC API进行连接和操作。通过这个示例,您可以了解到如何在Java中使用JDBC API进行数据库操作以及如何使用Java Swing创建基本的GUI应用程序。