如何在以下代码中获取ResultSet中的第一个元素:
public List getUserTest(String username, String password) {
List userList = new ArrayList();
Connection connection = null;
String rstring = null;
Statement stmt = null;///*******
ResultSet resultSet = null;
try {
connection = dataSource.getConnection();
stmt = connection.createStatement();///*******
resultSet = stmt.executeQuery("SELECT * FROM users WHERE (username)='" + username + "'"
+ "AND (password)='" + password + "'");///*******
while (resultSet.next()) {
UsersTest user = new UsersTest();
user.setId(resultSet.getString("id"));
user.setUsername(resultSet.getString("username"));
user.setPassword(resultSet.getString("password"));
userList.add(user);
}
} catch (SQLException e) {
System.err.println(e);
} finally {
try {
if (resultSet != null) {
resultSet.close();
}
if (stmt != null) {
stmt.close();
}
if (connection != null) {
connection.close();
}
} catch (SQLException e) {
}
}
return userList;
}
答案 0 :(得分:4)
ResultSet的第一个元素是您第一次执行while (resultSet.next())
循环时使用的元素,因此其内容用于构建userList
的第一个元素。 / p>
答案 1 :(得分:2)
执行:
resultSet.first()
点击此处查看API:
http://download.oracle.com/javase/1.4.2/docs/api/java/sql/ResultSet.html
PS:
在我看来,最好更换:
while (resultSet.next()) {
UsersTest user = new UsersTest();
user.setId(resultSet.getString("id"));
user.setUsername(resultSet.getString("username"));
user.setPassword(resultSet.getString("password"));
userList.add(user);
}
使用:(退回对象)
if (!rs.next())
//No user found.
else {
UsersTest user = new UsersTest();
resultSet.first();
user.setId(resultSet.getString("id"));
user.setUsername(resultSet.getString("username"));
user.setPassword(resultSet.getString("password"));
}
return user;
退货清单:(退货清单)
List userList = new ArrayList();
if (!rs.next())
//No user found.
else {
UsersTest user = new UsersTest();
resultSet.first();
user.setId(resultSet.getString("id"));
user.setUsername(resultSet.getString("username"));
user.setPassword(resultSet.getString("password"));
userList.add(user) //it will only add one element
}
return userList;
要调用您的方法,请执行以下操作:
UsersTest u = new UserTest();
List l = getUserTest(username, password)
if(l.size > 0)
u = l.get(0);
else
System.out.println("Cannot find user");
我建议因为我认为你不会有2个结果(List是不必要的)。你希望得到0或1个结果!
答案 2 :(得分:0)
ResultSet不是Java集合,因此没有真正的第一个元素。您可以在
的第一次迭代中访问第一个返回行的列<!-- language: lang-java -->
while(resultSet.next())
{
...
}
环。
答案 3 :(得分:0)
像这样:
List users = List getUserTest(username, password);
User user = ((users.size() > 0 ? users.get(0) : null);
事实是,您的数据库应该强制认为用户名/密码组合应该足以识别唯一的个人。查询应返回唯一个体或null。如果您的数据库具有此约束,则您编写的代码将以这种方式运行。
如果没有,则需要考虑您的架构设计。
答案 4 :(得分:0)
使用if(resultSet.first)...
代替while(resultSet.next)...
但是,如果您想获得所有结果,然后从所有这些结果中选择第一个,则可以这样做:
List<UsersTest> users = new ArrayList<UsersTest>();
while(resultSet.next){
UsersTest user = new UsersTest();
/*
* All your Setters but you should create a constructor with fields
*/
users.add(user);
}
并获得第一个结果UsersTest firstUser = users.get(0);