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;
    }
}

そして、Android でこのタイプのオブジェクトの MS SQL Server からリストを取得したいのですが、コネクタ ヘルパー クラス (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

ループの前に 1 つの User オブジェクトをインスタンス化し、反復ごとに同じ User オブジェクトを変更します。したがって、リストに同じ User オブジェクトが N 回追加されることになります。各反復で新しいユーザーを再作成する必要があります。

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