从数据库Java中获取记录

时间:2013-02-12 13:27:19

标签: java jsp jdbc

我有一张下面的表

enter image description here

我运行查询以获取表中的值如下

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或其他东西。

感谢回复。

5 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分: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 :(得分: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));
}

答案 3 :(得分: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);
}

答案 4 :(得分: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);
}