ArrayList方法返回

时间:2013-11-24 04:42:14

标签: java arraylist

我正在与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中),在运行或编译时没有问题。

我不知道我是不是写了不好的东西,或者只是一个菜鸟失败了。

1 个答案:

答案 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}}