2

以下のようなテーブルがあります

ここに画像の説明を入力

以下のようにテーブルの値を取得するクエリを実行します

SELECT Id, UserName, UserId, Password, 
       CASE Status WHEN 1 THEN 'Active' ELSE 'Inactive' END AS Status 
  FROM users

上記のクエリの Java コードは次のとおりです。

    String[] arrUsersList[] = new String[100][5];
    String[] arrUsersTem    =  new String[5];

    pstmt = conn.createStatement(rs.TYPE_FORWARD_ONLY, rs.CONCUR_READ_ONLY);
    rs    = pstmt.executeQuery(strSQL);


    while(rs.next())
    {   
        arrUsersTem[0] = rs.getString("Id");
        arrUsersTem[1] = rs.getString("UserName");
        arrUsersTem[2] = rs.getString("UserId");
        arrUsersTem[3] = rs.getString("Password");
        arrUsersTem[4] = rs.getString("Status");

        arrUsersList.add(arrUsersTem);
    }

私の質問は

Recordset から値を取得するには、2 次元配列を使用する必要があることはわかっています。上記の結果セットからレコードを取得する正しい方法は何ですか。

配列の正しいオプションですか、またはArrayListまたはその他のものを使用する必要があります。

返信ありがとうございます。

4

5 に答える 5

4

Java は OOP 言語なのでCollection、このクラス オブジェクトを使用してテーブルとフォームのエンティティを記述するクラスを作成するのが一般的な方法です。

class Account {

    private long id;
    private String userName;
    private String userId;
    private String password;
    private boolean status;

    // getters, setters
}

List<Account> accountList = new ArrayList();
Account account;

while(rs.next()) {   

    account = new Account();
    account.setId(rs.getLong("Id"));
    account.setUserName(rs.getString("UserName"));
    account.setUserId(rs.getString("UserId"));
    account.setPassword(rs.getString("Password"));
    account.setStatus(rs.getBoolean("Status"));

    accountList.add(account);
}
于 2013-02-12T13:29:10.463 に答える
4

データベース列ごとにフィールドを含む User Bean を作成する必要があります。次に、ユーザー Bean のリストを作成し、次のようにします。

List<User> users = new ArrayList<User>();
while(rs.next()) {   
        User user = new User();
        user.setId(rs.getString("Id"));
        user.setUsername(rs.getString("UserName"));
        //More fields here


        users.add(user);
    }

混乱を招く 2 次元配列ではなく、ユーザーのリストが残ります。

于 2013-02-12T13:31:06.610 に答える
2

結果セットは任意のサイズにすることができるため、Arrayを使用せず、Collection(または任意の派生実装)を使用する必要があります。

まず、取得するタプルを表すクラスを作成する必要があります。

public class User {

  // fields
  private int id;
  private int userId;
  private String username;
  private String password;
  private String status;

  // constructor
  public User(ResultSet rs) {
    id = rs.getInt("Id");
    // the same for the other fields...
  }
}

最後に、反復するときは、行/タプルごとに新しいインスタンスを作成し、結果のオブジェクトを必要に応じて拡大するコレクションに追加します。

List<User> users = new ArrayList<User>();
while(rs.next())
{   
   users.add(new User(rs));
}
于 2013-02-12T13:36:32.090 に答える
2

クラス User を作成します。

public class User {
   private int id;
   private String userName;
   private String userId;
   private String password;
   private boolean active;
   // getters & setters...
}

そして、次のようにユーザーを作成します。

SQL:

SELECT Id, UserName, UserId, Password, Status FROM users

ジャワ:

List<User> users = new ArrayList<User>();

while (rs.next()) {
   User user = new User();
   user.setId(rs.getInt(1));
   user.setUserName(rs.getString(2));
   user.setUserId(rs.getString(3));
   user.setPassword(rs.getString(4));
   user.setActive(rs.getInt(5)>0);
   users.add(user);
}
于 2013-02-12T13:39:00.193 に答える
0

これを試して:

while(rs.next()) {   

   account = new Account();
   account.setId(rs.getLong("Id"));
   account.setUserName(rs.getString("UserName"));
   account.setUserId(rs.getString("UserId"));
   account.setPassword(rs.getString("Password"));
   account.setStatus(rs.getBoolean("Status"));

   accountList.add(account);
}
于 2013-04-12T11:43:02.523 に答える