如何修改JDBC程序实现按钮触发增删改查并在JTextArea输出结果?
数据库增删改查操作修复方案
核心修正要点
- 使用
PreparedStatement替代Statement:避免SQL注入,同时解决字符串拼接导致的语法错误 - 增删改操作必须添加
WHERE条件:防止误操作全表数据 - 采用try-with-resources语法:自动关闭数据库连接、Statement、ResultSet,避免资源泄漏
- 将操作结果(成功/失败信息、查询数据)输出到JTextArea
1. 数据库连接工具方法(提取复用)
// 提取为单独方法,避免重复代码 private Connection getConnection() throws SQLException { // 替换为你的数据库实际配置 String url = "jdbc:mysql://localhost:3306/your_db?useSSL=false&serverTimezone=UTC"; String username = "root"; String password = "your_pwd"; return DriverManager.getConnection(url, username, password); }
2. Insert按钮点击事件修正
insertBtn.addActionListener(e -> { JTextArea resultArea = yourResultTextArea; // 替换为你的JTextArea实例 // 使用占位符?代替字符串拼接 String sql = "INSERT INTO user(name, age) VALUES (?, ?)"; try (Connection conn = getConnection(); PreparedStatement pstmt = conn.prepareStatement(sql)) { // 从输入框获取参数,替换为你的实际输入组件 pstmt.setString(1, nameInput.getText()); pstmt.setInt(2, Integer.parseInt(ageInput.getText())); int affectedRows = pstmt.executeUpdate(); resultArea.append("✅ 插入成功,影响行数:" + affectedRows + "\n"); } catch (SQLException | NumberFormatException ex) { resultArea.append("❌ 插入失败:" + ex.getMessage() + "\n"); ex.printStackTrace(); } });
3. Update按钮点击事件修正
updateBtn.addActionListener(e -> { JTextArea resultArea = yourResultTextArea; // 必须添加WHERE条件,指定更新目标 String sql = "UPDATE user SET age = ? WHERE id = ?"; try (Connection conn = getConnection(); PreparedStatement pstmt = conn.prepareStatement(sql)) { pstmt.setInt(1, Integer.parseInt(newAgeInput.getText())); pstmt.setInt(2, Integer.parseInt(userIdInput.getText())); int affectedRows = pstmt.executeUpdate(); if (affectedRows > 0) { resultArea.append("✅ 更新成功,影响行数:" + affectedRows + "\n"); } else { resultArea.append("⚠️ 更新失败:未找到匹配ID的记录\n"); } } catch (SQLException | NumberFormatException ex) { resultArea.append("❌ 更新失败:" + ex.getMessage() + "\n"); ex.printStackTrace(); } });
4. Delete按钮点击事件修正
deleteBtn.addActionListener(e -> { JTextArea resultArea = yourResultTextArea; // 必须添加WHERE条件,避免删除全表 String sql = "DELETE FROM user WHERE id = ?"; try (Connection conn = getConnection(); PreparedStatement pstmt = conn.prepareStatement(sql)) { pstmt.setInt(1, Integer.parseInt(userIdInput.getText())); int affectedRows = pstmt.executeUpdate(); if (affectedRows > 0) { resultArea.append("✅ 删除成功,影响行数:" + affectedRows + "\n"); } else { resultArea.append("⚠️ 删除失败:未找到匹配ID的记录\n"); } } catch (SQLException | NumberFormatException ex) { resultArea.append("❌ 删除失败:" + ex.getMessage() + "\n"); ex.printStackTrace(); } });
5. Search按钮点击事件修正
searchBtn.addActionListener(e -> { JTextArea resultArea = yourResultTextArea; resultArea.setText(""); // 清空之前的查询结果 // 示例模糊查询,可根据需求调整条件 String sql = "SELECT id, name, age FROM user WHERE name LIKE ?"; try (Connection conn = getConnection(); PreparedStatement pstmt = conn.prepareStatement(sql)) { pstmt.setString(1, "%" + searchKeywordInput.getText() + "%"); // 模糊查询通配符处理 ResultSet rs = pstmt.executeQuery(); // 遍历结果集并输出到JTextArea while (rs.next()) { int id = rs.getInt("id"); String name = rs.getString("name"); int age = rs.getInt("age"); resultArea.append(String.format("📋 ID: %d | 姓名: %s | 年龄: %d\n", id, name, age)); } resultArea.append("🔍 查询完成,无更多记录\n"); } catch (SQLException ex) { resultArea.append("❌ 查询失败:" + ex.getMessage() + "\n"); ex.printStackTrace(); } });
额外注意事项
- 替换代码中的
your_db、root、your_pwd、user、字段名等为你的实际数据库信息 - 输入参数需做格式校验(比如年龄、ID是整数类型时,捕获
NumberFormatException) - 确保项目中已引入MySQL JDBC驱动依赖
内容的提问来源于stack exchange,提问作者natsuken
相关产品推荐
相关产品推荐

