java - arraylist迭代,不会打印出第一行

时间:2017-08-12 19:36:29

标签: java mysql arraylist

借口: 首先,我想告诉你,我根本不是一个专业的java程序员,并且不知道arrayLists和迭代的所有细节。到目前为止,我已经走了很长的路,但我不知道我的问题,因为我对java中的列表有一点经验。

问题: 我试图把我的sql查询结果(我认为这也是一个数组列表,所以我可能使用了一个不需要的双数组列表。))进入一个ArrayList,之后我就开始了试图将每一行打印到我的控制台,但是我遇到了第一行没有打印的问题。

解决方案: 只要以下两件事情发生,我就会很好:1。将结果放在一个普通的数组中(所以没有ArrayList),这让我更容易,因为我知道如何处理数组。你们可以告诉我为什么第一行没有打印

我的数据库: 我有两个列,第一个是主键(ID),第二个是命令(我想在执行后执行的String(Varchar)。

我的代码:

public List<String> getCommands(){

    String sql = "SELECT * FROM query";
    try {
        PreparedStatement stmt = CONNECTION.prepareStatement(sql);
        ResultSet results = stmt.executeQuery();

        if (results.next()) {

            List<String> row = new ArrayList<String>();
            while(results.next()) {
                row.add(results.getString(2));
            }

            return row;

        } else {
            return null;
        }

    } catch (SQLException e) {
        e.printStackTrace();
    }
    return null;

}

List<String> results = SQL.getCommands();

if(results != null){
    getLogger().info("Found at least 1 command");

    for (Iterator<String> i = results.iterator(); i.hasNext();) {
        String row = i.next();
        getLogger().info("command: " + row);
    }

}else{
    getLogger().info("Can't find commands");
}

我的输出:它会打印数据库中第一行的所有内容。

3 个答案:

答案 0 :(得分:1)

看看ResultSet::next,它说:

  

将光标从当前位置向前移动一行。 ResultSet游标最初位于第一行之前;对方法的第一次调用使得第一行成为当前行;第二个调用使第二行成为当前行,依此类推。

在 while循环之前执行if (results.next()) 时,会跳过结果的第一行。

答案 1 :(得分:0)

在将结果添加到列表之前,您需要拨打results.next()两次。删除if (results.next()) {语句,一切都应该没问题。

在访问第一行之前必须调用

next(),但是您要调用它两次(在ifwhile语句中),因此光标已经在第二行当你开始阅读行内容时排。

答案 2 :(得分:0)

当您检查if (results.next()) results.next()实际被调用时,指向行的指针指向结果集的第一个元素。当您到达while(results.next())时,会再次调用next()并指向第二个元素,因此您可以删除if(resultset.next())