2014-02-17 108 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(); 
    }