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 中获取值。我也知道我做错了。从上述结果集中获取记录的正确方法是什么。

是数组正确选项还是我应该使用 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

您应该创建一个包含每个数据库列的字段的用户 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);
    }

然后,您将得到一个用户列表,而不是一个令人困惑的二维数组

于 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

我会创建一个类用户:

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 回答