我知道人们之前已经遇到过这个问题而且我已经完成了之前的帖子。 我有一个arrayList,我试图添加对象。在每次添加调用期间,都会复制相同的对象引用。虽然我使用了新的'运算符和我正在创建新对象。这是基本的,并且在我在每次迭代期间再次创建对象时已经起作用。 任何帮助深表感谢。 这是我的代码。
public List<Actor> readAllActors()
{
String selectMovie = "SELECT * from ACTOR;";
List<Actor> listOfActors = new ArrayList<Actor>();
try {
statement = conn.prepareStatement(selectMovie);
results = statement.executeQuery(selectMovie);
Actor a = new Actor();
while (results.next())
{
a = getActorFromResult(results);
listOfActors.add(new Actor(a.getId(), a.getFirstName(), a.getLastName(), a.getDateOfBirth()));
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return listOfActors;
}
private Actor getActorFromResult(ResultSet results) throws SQLException {
// TODO Auto-generated method stub
int id = results.getInt("id");
String fname = results.getString("firstName");
String lname = results.getString("lastName");
String dob = results.getString("dateOfBirth");
Actor actor = new Actor(id, fname, lname, dob );
return actor;
}
我尝试在每次迭代中打印对象。它从表中获取正确的行..新的Actor()似乎对创建新的对象引用没有任何影响!!
答案 0 :(得分:1)
您的代码很好,无法始终传递相同的参考。您可以通过==检查列出的对象来检查它。
您可以将代码重构为
results = statement.executeQuery(selectMovie);
while (results.next())
{
listOfActors.add(getActorFromResult(results));
}
因为您在获取结果集后创建了新的Actor
,因此创建了一个具有自己引用的新对象。这也将使代码更加清晰。
同样return new Actor(id, fname, lname, dob );
将在您的结果方法中完成工作。您无论如何都不使用自我描述性的局部变量。
我怀疑您的问题出在您的数据库中。尝试使用数据库工具查询它。
答案 1 :(得分:0)
尝试更改该行
listOfActors.add(new Actor(a.getId(), a.getFirstName(), a.getLastName(), a.getDateOfBirth()));
到那个
listOfActors.add(getActorFromResult(results));
并删除行
a = getActorFromResult(results);
您的引用肯定不一样,请在调试器中查看。