⁢ ⁢ 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日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效