我再写一个从数据库中读取数据在放到集合中,可从集合遍历出来后最后一条输出10(数据库中有10条记录)遍,这是为什么。
代码如下:
Collection col=null;
TreeImpl ti=new TreeImpl();//这是个读数据类
col= ti.getAllTree(); //读出所有数据方法
Iterator it=col.iterator();
while(it.hasNext()) {
TreeBean tr=(TreeBean) it.next();//数据表的bean
System.out.print(tr.getId());
System.out.print('\t');
System.out.print(tr.getContext());
System.out.print('\t');
System.out.println(tr.getFid());
}
代码如下:
Collection col=null;
TreeImpl ti=new TreeImpl();//这是个读数据类
col= ti.getAllTree(); //读出所有数据方法
Iterator it=col.iterator();
while(it.hasNext()) {
TreeBean tr=(TreeBean) it.next();//数据表的bean
System.out.print(tr.getId());
System.out.print('\t');
System.out.print(tr.getContext());
System.out.print('\t');
System.out.println(tr.getFid());
}
public Collection getAllTree(){
Collection col=null;
try {
stm=con.createStatement();
rs=stm.executeQuery("select * from tbTree order by fatherID");
col=populate(rs);
} catch (SQLException ex) {
ex.printStackTrace();
}
return col;
}
private Collection populate(ResultSet rs) throws SQLException
{ int i=0;
Collection col = new ArrayList();
while(rs.next()){
tree.setId(rs.getInt("ID"));
tree.setContext(rs.getString("context"));
tree.setFid(rs.getInt("fatherID"));
col.add(tree);
}
return col;
}
while(rs.next()){
/*不知道tree 的类型,用ctree代替*/
ctree tree=new ctree();
tree.setId(rs.getInt("ID"));
tree.setContext(rs.getString("context"));
tree.setFid(rs.getInt("fatherID"));
col.add(tree);
}注意,new创建的对象与c中的指针含义一致,所以你的做法无非是每次对add传了一个东西
你也可以对tree对象实现clone()方法,将其对象复制
while(rs.next()){
tree.setId(rs.getInt("ID"));
tree.setContext(rs.getString("context"));
tree.setFid(rs.getInt("fatherID"));
col.add(tree.clone());
}