帮我编写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应用程序。

相关推荐

最新推荐

recommend-type

java(swing)+ mysql实现学生信息管理系统

主要分享了java mysql实现学生信息管理系统的源码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
recommend-type

基于java swing实现答题系统

主要为大家详细介绍了基于java swing实现答题系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
recommend-type

Java Swing组件布局管理器之FlowLayout(流式布局)入门教程

主要介绍了Java Swing组件布局管理器之FlowLayout(流式布局),结合实例形式分析了Swing组件布局管理器FlowLayout流式布局的常用方法及相关使用技巧,需要的朋友可以参考下
recommend-type

Java swing读取txt文件实现学生考试系统

主要为大家详细介绍了Java swing读取txt文件实现学生考试系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
recommend-type

Java编程实现swing圆形按钮实例代码

主要介绍了Java编程实现swing圆形按钮实例代码,涉及两个简单的Java实现按钮的代码,其中一个具有侦测点击事件的简单功能,具有一定借鉴价值,需要的朋友可以参考。
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

SQL怎么实现 数据透视表

SQL可以通过使用聚合函数和GROUP BY子句来实现数据透视表。 例如,假设有一个销售记录表,其中包含产品名称、销售日期、销售数量和销售额等信息。要创建一个按照产品名称、销售日期和销售额进行汇总的数据透视表,可以使用以下SQL语句: ``` SELECT ProductName, SaleDate, SUM(SaleQuantity) AS TotalQuantity, SUM(SaleAmount) AS TotalAmount FROM Sales GROUP BY ProductName, SaleDate; ``` 该语句将Sales表按照ProductName和SaleDat
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。