You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java从MySQL读取数据填充jTable时触发异常进入catch块求助

问题排查及修复方案

第一步:先获取具体异常信息

你当前的catch块只输出固定的Connection Error,完全无法定位问题,先修改catch块打印异常详情:

catch (Exception e) {
    e.printStackTrace(); // 控制台打印完整错误堆栈
    JOptionPane.showMessageDialog(null, "错误:" + e.getMessage()); // 弹窗展示错误信息
}

运行后根据控制台或弹窗的具体报错可以更精准定位,以下是你代码中已经明确存在的必现问题:

已知问题列表

  • SQL语法错误
    你的查询语句写的是select *from,*和from之间缺少空格,拼接后SQL语法非法,MySQL会直接抛出语法异常,正确写法为select * from。
  • ResultSet游标操作异常
    DbUtils.resultSetToTableModel(rs)方法执行时会遍历整个ResultSet读取所有数据,执行完成后ResultSet的游标已经移动到末尾,且默认创建的Statement生成的ResultSet是仅向前遍历、不可回滚的,此时再调用rs.first()会直接抛出操作不支持的异常。
    另外你使用while(rs.first())逻辑错误:rs.first()是将游标跳转到第一行,只要存在数据返回值永远为true,会进入死循环。
  • 存在SQL注入风险
    直接把用户输入的PatientID拼接到SQL中,一旦用户输入特殊字符(比如单引号、SQL注入语句),既会导致SQL语法错误,也存在严重的安全问题,应该使用PreparedStatement代替Statement。
  • 资源未释放
    Connection、Statement、ResultSet用完后没有关闭,会造成数据库连接资源泄漏,运行多次后会因为连接耗尽报错。

修复后代码示例

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    String patientID = jtxtPatientID.getText().trim();
    // 先做非空校验
    if (patientID.isEmpty()) {
        JOptionPane.showMessageDialog(null, "请输入患者ID");
        return;
    }
    String sql = "select * from patient where PatientID = ?";
    // 用try-with-resources自动关闭资源
    try (Connection con = ConnectionProvider.getCon();
         PreparedStatement pst = con.prepareStatement(sql)) {
        pst.setString(1, patientID);
        ResultSet rs = pst.executeQuery();
        jTable1.setModel(DbUtils.resultSetToTableModel(rs));
        // 直接判断表格行数即可,不需要再操作ResultSet
        if (jTable1.getRowCount() > 0) {
            jlbPID.setVisible(false);
            jtxtPatientID.setEditable(false);
        } else {
            JOptionPane.showMessageDialog(null, "未找到对应患者信息");
        }
    } catch (Exception e) {
        e.printStackTrace();
        JOptionPane.showMessageDialog(null, "操作失败:" + e.getMessage());
    }
}  

内容的提问来源于stack exchange,提问作者ThangNQ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 21:09:02