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

Java 如何获取ResultSet中的第一个元素,java,resultset,Java,Resultset,如何在以下代码中获取ResultSet中的第一个元素: public List getUserTest(String username, String password) { List userList = new ArrayList(); Connection connection = null; String rstring = null; Statement stmt = null;///******* ResultSet result

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

ResultSet的第一个元素是您第一次执行
while(ResultSet.next())
循环时使用的元素,因此它的内容用于构建
用户列表的第一个元素

ResultSet不是Java集合,因此没有真正的第一个元素。您可以访问在第一次迭代中返回的第一行的列

<!-- language: lang-java -->
while(resultSet.next())
{
 ...
}

while(resultSet.next())
{
...
}
循环。

执行以下操作:

resultSet.first()
请在此处查看API:

附言:

我认为最好替换:

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);
    }
With:(返回对象)

退货清单:(退货清单)

要调用您的方法,请执行以下操作:

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个结果(列表是不必要的)。您希望得到0或1个结果

像这样:

List users = List getUserTest(username, password);
User user = ((users.size() > 0 ? users.get(0) : null);
事实上,您的数据库应该强化这样一种理念,即用户名/密码组合应该足以识别一个独特的个人。查询应返回唯一的个体或null。如果数据库有此约束,则编写的代码将以这种方式运行

如果没有,您需要考虑您的模式设计。

使用
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);
}
List users=new ArrayList();
while(resultSet.next){
UsersTest user=new UsersTest();
/*
*所有设置程序,但应使用字段创建构造函数
*/
用户。添加(用户);
}

并获取第一个结果
UsersTest firstUser=users.get(0)

但如果您关注while(resultSet.next()),您会发现我使用列表添加了所有记录。那么,如果我只想获取第一条记录,而不需要在查询中添加其余记录,该怎么办呢。换句话说,我只需要列表中的第一个元素,就像上面的代码一样。好吧,如果我只想得到列表中的第一个元素,尽管它的内容有更多的记录呢。(仅第一条记录,忽略其余记录)如果您只想从RestultSet中获取第一行,则不必使用
while(resultSet.next())
,只需使用
If(resultSet.next())
@duffmo实际上,用户名本身就应该是唯一标识个人的enuf。密码不应存储在数据库中。因此,已经有理由怀疑模式设计。请您根据我的代码编辑您的代码,以使其非常清楚。谢谢你说的用户u=resultSet.first()是什么意思;((用户))如果我复制您的代码并将其替换为我的代码,则会显示错误(未取消引用),谢谢,如果我要将其转换为列表,请如何处理?使用此方法返回列表而不是用户?我仍要使用列表,这意味着我想获取ResultSet的第一个元素,并将其转换为只有一条记录的列表。既然您的问题得到了很好的答案,您应该努力选择其中一条作为接受的答案,以表示您的感谢。这是适当的礼仪。
List users = List getUserTest(username, password);
User user = ((users.size() > 0 ? users.get(0) : null);
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);
}