首页 > 解决方案 > 选择部门名称时填写JComboBox

问题描述

try{
    String sql = "Select First_Name,MI,Last_Name from User_Table\n" +
                 "inner join Department_Table on User_Table.Department_ID=Department_Table.Department_ID\n" +
                 "where Department_Name = ? ";
    pst = conn.prepareStatement(sql);
    rs = pst.executeQuery();
    pst.setString(1, (String)DoctorDep.getSelectedItem());
    String add1 = rs.getString("First_Name");
    String add2 = rs.getString("MI");
    String add3 = rs.getString("Last_Name");
    DoctorNames.addItem(add1+" "+add2+" "+add3);
}catch(Exception e){
    JOptionPane.showMessageDialog(null, e);
}finally {
   try {
       rs.close();
       pst.close();
   }catch(Exception e){
   }
}

我在部门名称上选择部门名称JComboBox,它将选择该部门中列出的医生的姓名,但它显示错误消息结果集已关闭,并且未填充组合框医生名称。是否有错误或无法做到?

标签: javadatabase

解决方案


  • 您应该调用pst.setStringBEFORE pst.executeQuery,否则您没有将值绑定到查询
  • 您应该在尝试访问结果值之前调用rs.next(并检查它的返回值),否则您将“在第一个”结果之前。
  • 您还应该使用e.printStackTrace()它,因为它将为您提供有关异常的其他信息(您确实应该记录它,但让我们从那里开始)
  • 您应该使用该try-with-resources语句来更好地管理您的资源,因为您冒着让其中一些资源处于打开状态的风险

我建议您花时间阅读JDBC Basics Trail,因为这些与其说是程序或 API 问题,不如说是对如何使用 API 的误解


推荐阅读