从Java数据库中获取记录

从Java数据库中获取记录,java,jsp,jdbc,Java,Jsp,Jdbc,我有一张像下面这样的桌子 我运行一个查询以获取表中的值,如下所示 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

我有一张像下面这样的桌子

我运行一个查询以获取表中的值,如下所示

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);
    }
我的问题是

我知道我应该使用二维数组从记录集中获取值。我也知道我做得不对。从上述结果集中获取记录的正确方法是什么

数组是正确的选项,或者我应该使用ArrayList或其他东西


感谢您的回复。

Java是OOP语言,所以常用的方法是使用此类对象创建类来描述表和表单的实体

class Account {

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

    // getters, setters
}

List accountList=new ArrayList();
账户;
while(rs.next()){
账户=新账户();
账户设置Id(rs.getLong(“Id”));
account.setUserName(rs.getString(“用户名”);
account.setUserId(rs.getString(“UserId”);
account.setPassword(rs.getString(“Password”);
账户设置状态(rs.getBoolean(“状态”);
账户列表。添加(账户);
}

您应该创建一个用户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);
    }
List users=new ArrayList();
while(rs.next()){
用户=新用户();
user.setId(rs.getString(“Id”);
user.setUsername(rs.getString(“用户名”);
//这里有更多的田地
用户。添加(用户);
}

然后,您将得到一个用户列表,而不是一个混乱的二维数组

,因为结果集可以是任意大小的,所以您不应该使用数组,而应该使用集合(或任何派生实现)

首先,您应该创建一个表示正在检索的元组的类:

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));
}
List users=new ArrayList();
while(rs.next())
{   
添加(新用户(rs));
}

我将创建一个类用户:

public class User {
   private int id;
   private String userName;
   private String userId;
   private String password;
   private boolean active;
   // getters & setters...
}
然后创建如下用户:

SQL:

爪哇:

List users=new ArrayList();
while(rs.next()){
用户=新用户();
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);
用户。添加(用户);
}
试试这个:

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

感谢回复我是Java新手,所以我应该看看如何将表与Java中的集合关联起来。谢谢回复。所以列表后面的用户是类名,没错。即指定将存在于该列表中的对象类。它使用泛型。如果您想了解更多关于Java泛型的信息,请搜索Java泛型。我会避免让您的业务域对象(例如用户)依赖于诸如ResultSet之类的JDBC类。把它们分开。谢谢,每个人都帮我贴了每个人的答案。不知道该勾哪个
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);
}
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);
}