一、系统功能概述
电话查询系统需实现两个核心功能:一是通过图形化界面接收用户输入(如姓名、地区等),二是根据输入条件从数据库中检索匹配的电话号码。此类系统常见于企业通讯录管理、公共服务热线查询等场景,要求界面简洁直观、查询高效准确。
二、技术选型与架构设计
1. 界面开发技术
采用Java Swing库构建图形化界面,其优势在于跨平台兼容性强、组件丰富且无需依赖外部框架。核心组件包括:
JFrame:主窗口容器JPanel:布局面板JTextField/JButton:输入框与按钮JTable:结果展示表格
2. 数据存储方案
数据库选择需考虑数据规模与查询复杂度:
- 小型系统:SQLite嵌入式数据库(无需服务器,零配置)
- 中大型系统:MySQL/PostgreSQL(支持高并发与复杂查询)
3. 架构分层设计
采用MVC模式分离业务逻辑:
- Model层:封装数据库操作(DAO模式)
- View层:处理界面渲染与用户交互
- Controller层:协调Model与View,处理查询请求
三、核心代码实现
1. 界面实现(Swing)
import javax.swing.*;import java.awt.*;public class PhoneQueryUI extends JFrame {private JTextField nameField;private JTextField areaField;private JButton searchButton;private JTable resultTable;public PhoneQueryUI() {setTitle("电话号码查询系统");setSize(600, 400);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 输入面板JPanel inputPanel = new JPanel(new GridLayout(2, 2, 5, 5));inputPanel.add(new JLabel("姓名:"));nameField = new JTextField();inputPanel.add(nameField);inputPanel.add(new JLabel("地区:"));areaField = new JTextField();inputPanel.add(areaField);// 按钮searchButton = new JButton("查询");// 结果表格(模拟数据)String[] columns = {"姓名", "电话", "地区"};Object[][] data = {};resultTable = new JTable(data, columns);JScrollPane scrollPane = new JScrollPane(resultTable);// 布局setLayout(new BorderLayout(10, 10));add(inputPanel, BorderLayout.NORTH);add(searchButton, BorderLayout.CENTER);add(scrollPane, BorderLayout.SOUTH);// 按钮事件监听(需实现ActionListener)searchButton.addActionListener(e -> {String name = nameField.getText();String area = areaField.getText();// 调用查询逻辑searchPhone(name, area);});}private void searchPhone(String name, String area) {// 实际项目中此处调用DAO层方法// 示例:模拟查询结果Object[][] mockData = {{"张三", "13800138000", "北京"},{"李四", "13900139000", "上海"}};resultTable.setModel(new javax.swing.table.DefaultTableModel(mockData, resultTable.getColumnModel().getColumns().toArray()));}public static void main(String[] args) {SwingUtilities.invokeLater(() -> {PhoneQueryUI ui = new PhoneQueryUI();ui.setVisible(true);});}}
2. 数据库交互(DAO模式)
import java.sql.*;import java.util.ArrayList;import java.util.List;public class PhoneDAO {private Connection getConnection() throws SQLException {// 实际项目需配置真实数据库连接// 示例:使用内存H2数据库模拟return DriverManager.getConnection("jdbc:h2:mem:test", "sa", "");}public List<PhoneRecord> queryByConditions(String name, String area) {List<PhoneRecord> results = new ArrayList<>();String sql = "SELECT name, phone, area FROM contacts WHERE 1=1";// 动态构建SQL条件if (name != null && !name.isEmpty()) {sql += " AND name LIKE ?";}if (area != null && !area.isEmpty()) {sql += " AND area LIKE ?";}try (Connection conn = getConnection();PreparedStatement stmt = conn.prepareStatement(sql)) {int paramIndex = 1;if (name != null && !name.isEmpty()) {stmt.setString(paramIndex++, "%" + name + "%");}if (area != null && !area.isEmpty()) {stmt.setString(paramIndex++, "%" + area + "%");}ResultSet rs = stmt.executeQuery();while (rs.next()) {results.add(new PhoneRecord(rs.getString("name"),rs.getString("phone"),rs.getString("area")));}} catch (SQLException e) {e.printStackTrace();}return results;}}// 数据记录类class PhoneRecord {private String name;private String phone;private String area;public PhoneRecord(String name, String phone, String area) {this.name = name;this.phone = phone;this.area = area;}// Getter方法省略...}
四、性能优化与最佳实践
1. 数据库优化
- 索引设计:为
name和area字段创建复合索引 - 查询缓存:对高频查询结果进行缓存(如使用Caffeine)
- 分页处理:大数据量时实现分页查询
2. 界面交互优化
- 异步查询:使用
SwingWorker避免界面冻结searchButton.addActionListener(e -> {new SwingWorker<Void, Void>() {@Overrideprotected Void doInBackground() {String name = nameField.getText();String area = areaField.getText();List<PhoneRecord> results = new PhoneDAO().queryByConditions(name, area);// 更新表格数据(需在EDT中执行)SwingUtilities.invokeLater(() -> {Object[][] data = results.stream().map(r -> new Object[]{r.getName(), r.getPhone(), r.getArea()}).toArray(Object[][]::new);resultTable.setModel(new DefaultTableModel(data, resultTable.getColumnModel().getColumns().toArray()));});return null;}}.execute();});
3. 安全防护
- SQL注入防护:始终使用
PreparedStatement - 输入验证:对用户输入进行格式校验(如电话号码正则表达式)
五、扩展功能建议
- 多条件组合查询:支持姓名、电话、地区等多字段联合查询
- 批量导入功能:通过Excel/CSV文件批量导入联系人数据
- 历史查询记录:记录用户查询历史以便快速回访
- 模糊匹配增强:实现拼音首字母查询、同音字匹配等高级功能
六、部署与维护
- 打包发布:使用Maven/Gradle构建可执行JAR
- 日志系统:集成Log4j2记录系统运行日志
- 数据库备份:定期备份联系人数据
通过上述实现方案,开发者可快速构建一个功能完备、性能稳定的电话查询系统。实际项目中需根据具体需求调整数据库设计、界面布局及查询逻辑,同时注意遵循安全编码规范与性能优化原则。