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