我有这个用户类(这是一个简化版本的示例,真实的有更多参数,但它们以相同的方式实现):
public class User {
private int _userID;
private String _fullName;
public User(){
}
public User(int userID, String fullName){
this._userID = userID;
this._fullName = fullName;
}
int getUserID(){
return this._userID;
}
String getFullName(){
return this._fullName;
}
void setUserID(int userID){
this._userID = userID;
}
void setFullName(String fullName){
this._fullName = fullName;
}
}
我想从我的MS SQL Server中检索Android中此类对象的列表,我在连接器助手类(负责使用JDBC连接服务器的负责人)中使用此方法: / p>
public List<User> getUsers(int ID){
java.sql.ResultSet result = null;
List<User> users = new ArrayList<User>();
User user = new User();
try {
connection = this.getConnection();
if (connection != null) {
//QUERY
String statement = "SELECT * Users WHERE groupID = "
+ ID;
Statement select = connection.createStatement();
//Calls Query
result = select.executeQuery(statement);
while (result.next()){
user.setUserID(result.getInt("UserID"));
user.setFullName(result.getString("FullName"));
System.out.println(result.getString("FullName"));
//Adds to the list
users.add(user);
}
result.close();
result = null;
closeConnection();
}
else {
System.out.println("Error: No active Connection");
}
} catch (Exception e) {
e.printStackTrace();
}
return users;
}
根据我在每次迭代中使用的System.out.println从服务器中很好地检索数据,问题是列表总是填充有关我检索的最后一个用户的重复信息,澄清:
如果我有用户A,B和C,当我读用户A时,列表有这样的结构:[A],当我读用户B时,列表是:[B,B],当我读到用户C:[ C,C,C]等所以基本上所有列表中的对象都被最后一次读取覆盖。
我几个小时都在苦苦挣扎,希望有人能发现问题,因为我不能,提前感谢你的帮助。
答案 0 :(得分:1)
在循环之前实例化单个User对象,然后在每次迭代时修改相同的User对象。因此,您最终会将N次相同的User对象添加到列表中。您必须在每次迭代时重新创建一个新用户:
while (result.next()){
User user = new User();
user.setUserID(result.getInt("UserID"));
...