关于链表添加数据的问题

关于链表添加数据的问题
图片是河科大的晚霞,哈哈哈,好看把(盗的盗的),后面写的博客的图片应该有很多科大系列

问题描述

在写数据库增删改查小项目的时候,在设计到将所有信息显示到页面上的时候出现了问题,就是只会显示最后一个数据,并且个数是和真实数据的个数是一样的,具体图片见下图.错误
经过多方排查和查阅资料,发现了问题所在,其实就是一句代码的问题,往下看把.

代码片段

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
try {
//获取连接
conn = JdbcUtil.getConnection();
//sql语句
String sql = "select * from product";
stmt = conn.prepareStatement(sql);
rs = stmt.executeQuery();
ArrayList<Product> list = new ArrayList<Product>();
Product p=new Product();//注意这一句话的位置
//将得到的结果集中的数据添加到list中
while (rs.next()) {
p.setpId(rs.getInt("pId"));
p.setpName(rs.getString("pName"));
p.setpPrice(rs.getFloat("pPrice"));
p.setsId(rs.getInt("sId"));
p.setType(rs.getString("type"));
p.setpNum(rs.getInt("pNum"));
list.add(p);
}
//返回list
return list;
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}finally{
JdbcUtil.close(conn, stmt,rs);
}

上面的Product p=new Product()这句代码被放在了while循环的外面,那么就是每次添加数据的时候,就是添加的同一个对象,在内存中的地址是一样的,就会造成后面添加的数据,把前面添加的数据覆盖的情况,最后就会形成list中添加的都是最后一个product.
解决办法: 就是把Product p=new Product()这句话写到while循环的里面,每次循环开始都会创建一个新的对象,在内存中对应一个新的地址,这样就不会把前面的数据覆盖了.

参考链接: https://woyixiaorenne.iteye.com/blog/2290385

发发牢骚

果然习惯晚睡的人,再怎么努力的早睡都是徒劳,还不如来总结下,哈哈哈哈!!!

咦~~~~ 这是嘛呀!!!
0%