【问题标题】:Taking Records from Database Java从数据库 Java 中获取记录
【发布时间】:2013-01-27 19:47:28
【问题描述】:

我有一张如下表

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

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

感谢您的回复。

【问题讨论】:

  • 谢谢,每个人都帮了我每个人都发布了答案。不知道该打勾

标签: java jsp jdbc


【解决方案1】:

试试这个:

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

【讨论】:

    【解决方案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
    

    Java:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 感谢回复我是Java新手所以我应该寻找如何将表与Java中的集合相关联
      【解决方案4】:

      由于结果集可以是任意大小,因此不应使用数组,而应使用 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));
      }
      

      【讨论】:

      • 我会避免让您的业务领域对象(例如用户)依赖于 JDBC 类,如 ResultSet。将它们分开。
      【解决方案5】:

      您应该创建一个包含每个数据库列的字段的用户 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 之后的 User 是 Class Name Right
      • 是的,没错。那就是指定将存在于该列表中的对象的类别。它使用泛型。如果您想了解更多信息,请搜索 Java 泛型
      猜你喜欢
      • 2011-05-29
      • 2015-11-20
      • 1970-01-01
      • 2021-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-05
      相关资源
      最近更新 更多