Mysql结果集错误

时间:2014-02-17 12:09:21

标签: java mysql resultset

我正在执行一个代码块,我需要从数据库中检索一组用户并用它们做一些事情。非常简单的场景。 问题是虽然我使用while(rs.next()),但当rs.next()达到null时,我的程序会尝试继续使用while子句中的代码并以Null Exception退出。

为什么会这样?我的代码中有什么东西坏了,我无法弄明白吗? 请注意,rs永远不会null。在开始时在控制台上打印rs的所有内容,但是当它到达结尾时它返回null异常。

   try {                       
      String sql = "select distinct userid from userinfo";
      stmt1 = conn.createStatement();
      try (ResultSet rs = stmt1.executeQuery(sql)) {
         while (rs.next()) {
            String mentionsIDs = (rs.getString("mentions")).trim();

            try{
               if (!mentionsIDs.isEmpty() ){
                  System.out.println(mentionsIDs);
                  String[] arr = mentionsIDs.split("\\s+");
                  if(isNumeric(arr[0])){
                     System.out.println(arr[0]);
                     sources.add(Long.parseLong(arr[0]));
                  }
               }            
            }
            catch(Exception ex){
               Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex);
            }
         }   
         rs.close();
      }

感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

您还必须检查结果集是否确实包含一些结果。在while循环上添加一个条件,检查rs是否为null。

if(rs!=null) {
    while(rs.next()) {
        ... Process
    }
} else {
    System.out.println("The query returned 0 results");
}

在您的代码中:

String sql = "select distinct userid from userinfo";
stmt1 = conn.createStatement();
try (ResultSet rs = stmt1.executeQuery(sql)) {
      if(rs!=null) {
      while (rs.next()){
      String mentionsIDs = (rs.getString("mentions")).trim();
      try{
          if (!mentionsIDs.isEmpty() ){
                System.out.println(mentionsIDs);
                String[] arr = mentionsIDs.split("\\s+");
                if(isNumeric(arr[0])){
                   System.out.println(arr[0]);
                   sources.add(Long.parseLong(arr[0]));
                }
          }
       }
       catch(Exception ex){
          Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex);
       }
   }   
   rs.close();
   }

答案 1 :(得分:0)

在try块中移动String mentionsIDs = (rs.getString("mentions")).trim();然后捕捉NullPointerException