0

我有这个用户类(这是示例的简化版本,真实的有更多参数,但它们的实现方式相同):

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 与服务器建立连接的类)中使用此方法:

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] 等。所以基本上列表中的所有对象都被最后一个读取的对象覆盖。

我已经为此苦苦挣扎了几个小时,希望有人能发现问题,因为我不能,在此先感谢您的帮助。

4

1 回答 1

1

您在循环之前实例化一个 User 对象,然后在每次迭代时修改相同的 User 对象。因此,您最终会在列表中添加 N 次相同的用户对象。您必须在每次迭代时重新创建一个新用户:

while (result.next()){
    User user = new User();
    user.setUserID(result.getInt("UserID"));
    ...
于 2012-05-02T17:31:42.900 回答