首页 > 编程语言 >Java中使用List的add方法后元素相同问题

Java中使用List的add方法后元素相同问题

时间:2022-10-18 22:58:38浏览次数:51  
标签:Java getString rs list get List add user

在写JavaWeb时,我在后端通过JDBC读取了数据后逐个使用List.add()方法添加元素并通过request方法传给jsp页面解析,但是添加以后出现了在列表里有n个(假设添加了n个元素)最后一个元素,前面的数据全部丢失,最后排查到问题出现在JDBC读取时,具体代码如下

    @Nullable
    public static List<User> getAll(){
        List<User> list= new ArrayList<User> ();
        Connection conn = getConn();
        PreparedStatement ps=null;
        ResultSet rs=null;
        String sql="select * from library";
        try {
            ps= (PreparedStatement) conn.prepareStatement(sql);
            rs=ps.executeQuery();
            User user= new User ();
            while(rs.next()){
                user.setId(rs.getString("id"));
                user.setName(rs.getString("name"));
                user.setSex(rs.getString("sex"));
                user.setAge(rs.getInt("age"));
                user.setTelephone(rs.getString("tel"));
                user.setAddress(rs.getString("address"));
                list.add(user);
            }
            for(int    i=0;    i<list.size();    i++) {
                System.out.println ("<tr><td>"+ i +list.get(i).getId()+"</td><td>"+ list.get(i).getName()+"</td><td>"+ list.get(i).getSex()+"</td><td>"+ list.get(i).getAge()+"</td><td>"+ list.get(i).getTelephone()+"</td><td>"+ list.get(i).getAddress()+"</td></tr>");
            }
            ps.close();
            conn.close();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return list;
    }

经过排查最终发现在list.add()部分,考虑到初始化List对象在循环外,List添加的是对象的引用,Test只被new了一次然后不断被赋值,所以最后只能写入最后一个元素,根据我的理解,这一部分应该是编译时候编译器把具体内容放在了实例化全部结束以后以提高运行效率,但是在这里就造成了逻辑性的错误导致最后出现的结果异常(具体原因未知,如果有大佬明白还望不吝赐教),最后将实例化过程放在循环内即可解决问题

    @Nullable
    public static List<User> getAll(){
        List<User> list= new ArrayList<User> ();
        Connection conn = getConn();
        PreparedStatement ps=null;
        ResultSet rs=null;
        String sql="select * from library";
        try {
            ps= (PreparedStatement) conn.prepareStatement(sql);
            rs=ps.executeQuery();
            while(rs.next()){
                User user= new User ();
                user.setId(rs.getString("id"));
                user.setName(rs.getString("name"));
                user.setSex(rs.getString("sex"));
                user.setAge(rs.getInt("age"));
                user.setTelephone(rs.getString("tel"));
                user.setAddress(rs.getString("address"));
                list.add(user);
            }
            for(int    i=0;    i<list.size();    i++) {
                System.out.println ("<tr><td>"+ i +list.get(i).getId()+"</td><td>"+ list.get(i).getName()+"</td><td>"+ list.get(i).getSex()+"</td><td>"+ list.get(i).getAge()+"</td><td>"+ list.get(i).getTelephone()+"</td><td>"+ list.get(i).getAddress()+"</td></tr>");
            }
            ps.close();
            conn.close();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return list;
    }

标签:Java,getString,rs,list,get,List,add,user
From: https://www.cnblogs.com/cjjcn/p/16804510.html

相关文章

  • Java动态绑定机制
    本文主要记录韩顺平老师讲解动态绑定机制过程中提到的重点,本文转载此篇博客【Java】动态绑定机制,并对其进行一定的补充,如有侵权会删除。特点当调用对象方法的时候,该方法......
  • Java 集合简介 一
    什么是集合?集合就是由若干个确定的元素所构成的整体。例如,5只小兔构成的集合:在数学中,我们经常遇到集合的概念。例如:●有限集合○一个班所有的同学构成的集合;○一......
  • JavaScript学习--Array数组对象
    定义1.var变量名=newArray(元素列表);如vararr=newArray(1,2,3);2.常用:var变量名=[元素列表];如vararr=[1,2,3];访问arr[索引]=值;如arr[0]=1;ps:数组长度类型均可变 len......
  • JavaScript学习--基础语法03
    流程控制语句if,switch,for,while,dowhile。与之前学过的一样。 函数定义:通过function关键词定义语法:functionfunctionName(参数1,参数2) {  具体代码 }例子fu......
  • JavaScript学习--03
    运算符除了==和===其他和c语言都一样==:1.判断类型是否一样,如果不一样,则进行类型转换2.再去比较其值===:全等于1.判断类型是否一样,如果不一样,直接返回fa......
  • javaSE基础-抽象
    抽象(abstract)java关键字abstract,可用于修饰类、方法。抽象类格式:修饰符abstractclass类名{}1、此类不能实例化2、抽象类中一定有构造器,便于子类实例化时调用3、......
  • javaSE基础-接口
    接口(Interface)使用implements关键字使一个类遵循某个特定接口(或一组接口),它表示:接口只是外形。接口决定方法名、参数列表和返回类型,但是无法确定方法体。接口只提......
  • 通过netty把百度地图API获取的地理位置从Android端发送到Java服务器端
    本篇记录我在实现时的思考过程,写给之后可能遇到困难的我自己也给到需要帮助的人。写的比较浅显,见谅。在写项目代码的时候,需要把Android端的位置信息传输到服务器端,通过Ne......
  • Java 快速排序之一的 冒泡排序 效率较低 但是对新手比较友好
    packagetest;importjava.util.Scanner;importjava.util.Arrays;//把数组的内容全打印出来,并且加上中括号而且中间自己加入逗号。publicclassDay_19{publicstaticvo......
  • Java第五讲异常处理总结
    1.在运行上述代码时javac产生idiv字节码指令,在运行下面的程序时javac产生ddiv字节指令,导致了两段代码运行结果不同。2.      3.finally语句块一定会执行吗......