2014-02-17 90 views
0

我正在执行一段代码,我需要从数据库中检索一组用户,并与他们做一些事情。非常简单的情况。 问题是,虽然我使用while(rs.next()),但当rs.next()达到空值时,我的程序尝试继续使用while子句中的代码并使用Null异常退出。Mysql结果集错误

这是为什么发生?我的代码中有些东西被破坏了,我无法弄清楚? 请注意,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(); 
     } 

任何帮助表示赞赏。

+1

你只返回不同的userids和阅读'mentions'列? '(rs.getString(“mentions”))。trim()'可以抛出'NullPointerException'是'rs.getString(“mentions”)'为null –

+0

你完全正确!万分感谢!! – user2008973

+1

'rs.close()'不再需要,因为'try(...)'。 –

回答

0

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

0

您还必须检查结果集是否确实有一些结果。在你的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(); 
    }