如何获取ResultSet中的第一个元素

时间:2011-07-28 00:27:01

标签: java resultset

如何在以下代码中获取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;
}

5 个答案:

答案 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);