2017-08-12 53 views
0

借口: 开始我想告诉你,我不是一个专家级的java程序员,也不知道arrayLists和迭代的所有细节。到目前为止,我已经走过了一段很长的路,但我不知道我的问题,因为我对Java中的Lists很少有经验。java - arraylist迭代,不打印出第一行

问题: 我试图把我的SQL查询结果(结果集(我想这也是一个数组列表,所以IM可能使用它不需要双数组列表))到ArrayList中,之后,我尝试将每行打印到控制台中,但遇到第一行未打印的问题。

解决方案: 我很好,只要下面有两种情况:1.将导致正常阵列(所以没有ArrayList中),这使得它更容易为我,因为我知道如何处理数组。 2.你们能告诉我为什么第一行不会被打印

我的数据库: 我有两个colums,第一个是主键(ID),第二个是一个命令(字符串( 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"); 
} 

我的输出:它打印一切exept在数据库中的第一行

+0

您正在调用'results.next()'两次,因此它跳过第一行。你应该删除'if'子句。 – tima

+0

这不是'arraylist迭代'。 – saka1029

回答

0

在将结果添加到列表中之前,您需要调用results.next()两次。删除if (results.next()) {声明,一切都应该没问题。

next()必须一次访问的第一行之前被调用,但你两次调用它(在if并在while声明),所以光标已经在第二排,当你开始阅读的内容行。

+0

这解决了这个问题,非常感谢。你有什么想法我可以检查是否没有行返回null? – user3645480

+0

最好是空保存并返回一个空列表以防止空检查和空指针异常。但是,如果你想要你的空结果,你可以在while循环中添加元素后检查你的list.isEmpty()。如果列表为空,则没有返回的结果,然后可以返回null而不是列表。 – Simulant

+0

@ user3645480'.next()'根据结果集中是否有更多行或当前最后一行返回true或false。 – wdc

1

看看ResultSet::next,它说:

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

当你这样做while循环if (results.next())之前,结果的第一行被跳过。

0

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

+1

谢谢,你的回答非常有帮助! – user3645480