帮我看段java代码

来源:百度知道 编辑:UC知道 时间:2024/05/19 16:21:24
ArrayList getRecultSet(String sql,String databaseName,String userName,String password){
Connection con = getConnection(databaseName,userName,password);
Statement stmt = null;
ResultSet rs = null;
ArrayList arr1 = new ArrayList();
ArrayList arr2 = new ArrayList();
try {
stmt = con.createStatement();
rs = stmt.executeQuery(sql);

while(rs.next()){
int i = rs.getMetaData().getColumnCount();
int j = 1;
while(j<=i){
arr1.add(rs.getString(j));
j++;
}
arr2.add(new ArrayList(arr1));
arr1.clear();

}
} catch (SQLException ex) {
ex.printStackTrace();
}
return arr2;

跟方法名没什么关系,改成下面的样子:
ArrayList getRecultSet(String sql,String databaseName,String userName,String password){
Connection con = getConnection(databaseName,userName,password);
Statement stmt = null;
ResultSet rs = null;
ArrayList arr1 = null;
ArrayList arr2 = new ArrayList();
try {
stmt = con.createStatement();
rs = stmt.executeQuery(sql);

while(rs.next()){
arr1 = new ArrayList();
int i = rs.getMetaData().getColumnCount();
int j = 1;
while(j<=i){
arr1.add(rs.getString(j));
j++;
}
arr2.add(new ArrayList(arr1));
//arr1.clear();这句话不能要

}
} catch (SQLException ex) {
ex.printStackTrace();
}
return arr2;

}
——————————————————————————
像你那样写,每次添加的都是同一个对象,只是添加了n次而以,所以最后肯定都是最后一条记录的内容。因为java是采用引用的方式的,你添加到arr2里,但下面你又修改了arr1,所以才会出现那种现象

ArrayList保存的是对象的引用!而不是对象的值
arr2.add(new ArrayList(arr1)); 实际上是把arr2的引用指向arr1了! 也就是说arr1和arr2引用了同一个地址(当然