我正在与DB合作开展一个项目。有一种方法可以从DB收集信息并在ArrayList中设置信息:
public ArrayList<Director> listAll(){
ArrayList<Director>list = new ArrayList<Director>();
Director direc = new Director();
int cont=0;
String sql = "select * from director;";
try{
ResultSet res = objBBDD.sentencia.executeQuery(sql);
while(res.next()){
direc.setCode(res.getInt("CODE"));
direc.setName(res.getString("NAME"));
direc.setNationality(res.getString("NATIONALITY"));
direc.setOscar(res.getInt("OSCAR"));
list.add(direc);
// THIS IS USE TO CONFIRM IF IT WORKS ///////////////////////////////////////
// JOptionPane.showMessageDialog(null,"Code:"+list.get(cont).getCode()+"Nombre"+list.get(cont).getName());
// cont++;
}
}catch (SQLException e) {
e.printStackTrace();
}
return list;
}
我使用JOptionPane.showMessageDialog来查看我是否从DB获取信息并将其正确添加到de ArrayList中,并且它可以正常工作。
现在ArrayList支持调用者类,这是方法:
private void stackArray(){
ArrayList<Director>arrayDir = new ArrayList<Director> ();
ArrayList<Director>arrayDir = conexion.listAll();
// JOptionPane.showMessageDialog(null,"Code:"+arrayDir.get(0).getCode()+"Name"+arrayDir.get(0).getName());
// JOptionPane.showMessageDialog(null,"Code:"+arrayDir.get(1).getCode()+"Name"+arrayDir.get(1).getName());
// JOptionPane.showMessageDialog(null,"Code:"+arrayDir.get(2).getCode()+"Name"+arrayDir.get(2).getName());
}
我再次使用JOptionPane.showMesageDialog来显示前三个位置,但它不起作用,就我所见,问题是所有位置都保存了相同的对象(恰好是最后一个)。
总结ArrayList具有相同的对象(最后在DB中),在运行或编译时没有问题。
我不知道我是不是写了不好的东西,或者只是一个菜鸟失败了。
答案 0 :(得分:2)
问题,就我所见,所有的立场都是一样的 保存对象(完全是最后一个)。
您正在更改同一实例Director
的值。这就是为什么,你看到了last value
Director
对象的Director
。您应该使用while循环的迭代创建ResultSet res = objBBDD.sentencia.executeQuery(sql);
while(res.next){
Director direc = new Director();// Declare Director instance here.
.....
list.add(direc);
}
的新实例。
{{1}}