人类与发展 2023-10-22 20:55 采纳率: 100%
浏览 8
已结题

ResultSet结果集转换为List,结果重复

将ResultSet结果集转换为List,打印出来的结果却全是第三条记录。
这是我的数据库表

img

这是结果

img

img

img

    @Test
    public void TestSelectAll() throws Exception {
        //用连接池的方法
        //1. 导入Druid jar包
        //2. 定义配置文件
        //3. 加载配置文件
        Properties prop = new Properties() ;
        prop.load(new FileInputStream("src/durid.properties"));

        //4. 获取连接池对象
        DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);

        //5.获取数据库连接
        Connection conn = dataSource.getConnection();

        //6.定义SQL语句
        String sql = "select * from brand1";

        //7.获取pstmt对象
        PreparedStatement pstmt = conn.prepareStatement(sql);

        //8.设置参数
        //9.执行SQL
        ResultSet res = pstmt.executeQuery();

        //10.处理结果:
        // 先将查询到结果封装成Brand对象,再装载到List集合里
        Brand bra= new Brand();
        List<Brand> brands = new ArrayList<Brand>();
        while (res.next()){
            //获取数据
            int id = res.getInt("id");
            String brandName = res.getString("brand_name");
            String companyName = res.getString("company_name");
            int ordered = res.getInt("ordered");
            String description = res.getString("description");
            int status = res.getInt("status");

            //封装Brand对象
            bra.setId(id);
            bra.setBrandName(brandName);
            bra.setCompanyName(companyName);
            bra.setOrdered(ordered);
            bra.setDescription(description);
            bra.setStatus(status);

            //装载集合
            brands.add(bra);
        }
        System.out.println(brands);

        //11.释放资源
        res.close();
        pstmt.close();
        conn.close();

    }

  • 写回答

2条回答 默认 最新

  • kesa4j 2023-10-22 21:09
    关注

    你的new Brand()应该写在循环里面;
    按你这个写法,只是在list里加了三次同一个对象,该对象最后一次赋值刚好是第三条记录。

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

报告相同问题?

问题事件

  • 系统已结题 10月31日
  • 已采纳回答 10月23日
  • 创建了问题 10月22日