从MS SQL Server填写对象列表

时间:2012-05-02 17:27:09

标签: android sql list jdbc

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

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

我几个小时都在苦苦挣扎,希望有人能发现问题,因为我不能,提前感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

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

while (result.next()){
    User user = new User();
    user.setUserID(result.getInt("UserID"));
    ...