【问题标题】:Mysql Result set ErrorMysql结果集错误
【发布时间】:2014-03-16 17:29:11
【问题描述】:

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

为什么会这样?我的代码中是否有一些我无法弄清楚的问题? 请注意rs 绝不是null。一开始在控制台打印rs 的所有内容,但当它到达末尾时,它返回空异常。

   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();
      }

感谢任何帮助。

【问题讨论】:

  • 您只返回不同的用户 ID 并阅读 mentions 列? (rs.getString("mentions")).trim() 可以抛出 NullPointerException is rs.getString("mentions") is null
  • 你完全正确!!非常感谢!!
  • rs.close() 不再需要,因为try(...)

标签: java mysql resultset


【解决方案1】:

您还必须检查结果集中是否确实有一些结果。在您的 while 循环上放置一个条件,以检查 rs 是否为空。

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();
   }

【讨论】:

    【解决方案2】:

    String mentionsIDs = (rs.getString("mentions")).trim(); 移动到 try 块内,然后捕获 NullPointerException

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-15
      • 1970-01-01
      • 2014-02-18
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 2019-03-28
      • 1970-01-01
      相关资源
      最近更新 更多