我有一张下面的表
我运行查询以获取表中的值如下
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或其他东西。
感谢回复。
答案 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);
}