⁢ ⁢ 2022-03-16 18: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-16 23: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月24日
  • 已采纳回答 3月17日
  • 创建了问题 3月16日

悬赏问题

  • ¥15 车型识别以及相似度匹配中细节特征提取以及图像模糊问题
  • ¥15 怎么用鸿蒙的ArkTs写出来啊
  • ¥30 websocket服务端多线程通信
  • ¥15 JNA 方法调用.dll异常
  • ¥30 oracle 事务相关
  • ¥100 chrome插件开发如何在textarea插入文本
  • ¥15 vs 创建windows 窗体应用(.net framework)项目时,出现问题,无法进入下一步
  • ¥15 如何实现安卓Socks5代理服务端,并且实现内网穿透?
  • ¥50 自有服务器搭建正向代理及负载均衡应对高并发
  • ¥15 Expected a list, got: <class 'list'>. Correct! 为什么它不输出答案而是答案的类型
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部