⁢ ⁢ 2022-03-17 02:45 采纳率: 100%
浏览 53
已结题

关于JAVA中list.add向链表添加数据的问题!

想把stu中的值存到list中,调试到这一步再向下调试直接跳过了list.add(stu);最后return list;的返回值也是空的

img


请问一下这是怎么回事?

public  List<Student> findStudents(String studName, Integer pageNo, Integer pageSize){
           List<Student> list=new ArrayList<Student>();       
          try{ 
             conn=SqlHelper.connect();
             String sql="Select a.major_name,b.* from xsgl_major a,xsgl_student b where a.major_id=b.major_id and stud_name like ? ";
                    sql=sql+ " limit "+ (pageNo-1)* pageSize+","+pageSize;
             ps=conn.prepareStatement(sql);
             ps.setString(1, "%"+studName+"%");
             rs=ps.executeQuery();
             
             while(rs.next()){
                 Student stu=new Student();
                 Major major=new Major();
                 stu.setMajor(major);
                 major.setMajorName(rs.getString(1));
                 stu.setStudNo(rs.getString(2));
                 major.setMajorId(rs.getInt(3));
                 stu.setStudName(rs.getString(4));
                 stu.setStudSex(rs.getString(5));
                 stu.setStudBirthDate(rs.getDate(6));
                 stu.setStudIsMember(rs.getBoolean(7));
                 stu.setStudAddress(rs.getString(8));
                 stu.setStudResume(rs.getString(9));
                 stu.setStudPic(rs.getBytes(10)); 
                 list.add(stu); 
             }      
             
          }catch(Exception e){  

          }finally{
            SqlHelper.closeResultSet(rs);
            SqlHelper.closePreparedStatement(ps);
            SqlHelper.closeConnection(conn);           
         } 
           return list;
       }

  • 写回答

6条回答 默认 最新

  • 大鹏cool Java领域优质创作者 2022-03-17 07:14
    关注

    错误在于 rs.getBytes(10) 这个代码,第 10 列数据库字段的类型无法转换为 Java 的 Byte 类型导致报错,从而跳出循环直接 return ,检查下这个列的数据库类型是什么,然后再改成其他方法获取值,可以先拿 SQL 在其他客户端执行确认第 10 列字段是什么。

    上面的代码同时也暴露出了几个问题,题主可以加以留意。

    1. 尽量不要 select *,这样可以增加可读性,同时对查询效率可能有一定提升。
    2. catch 后一定要打印异常,便于排查问题,例如上面的代码可以改成 e.printStackTrace();
    3. 尽量使用列名的形式获取数据库的字段值,这样可以不必关心列的顺序,例如上面的代码可以改成 major.setMajorName(rs.getString("a.major_name"));

    最后如果有帮助,请帮忙点个采纳。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

问题事件

  • 系统已结题 3月25日
  • 已采纳回答 3月17日
  • 创建了问题 3月17日

悬赏问题

  • ¥15 echarts动画效果失效的问题。官网下载的例子。
  • ¥60 许可证msc licensing软件报错显示已有相同版本软件,但是下一步显示无法读取日志目录。
  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
  • ¥15 前置放大电路与功率放大电路相连放大倍数出现问题
  • ¥30 关于<main>标签页面跳转的问题
  • ¥80 部署运行web自动化项目
  • ¥15 腾讯云如何建立同一个项目中物模型之间的联系
  • ¥30 VMware 云桌面水印如何添加