2016-04-21 41 views
0

我是來自C#的Java的新手。一直試圖找出一些東西,但我不明白。Java在數據庫中忽略NullPointerException?

所以我們可以說,我們有以下內容的表:「CMD」

_id | body      | partner_jid | bin_id 
---------------------------------------------------------- 
1 | Hello      | jid_2933219 | group_30 
2 | null      | jid_2933219 | group_30 
3 | !cmd      | jid_2933219 | group_30 
4 | An       | jid_2933219 | group_30 
5 | Example     | jid_2933219 | group_30 

好了,所以基本上什麼需要做的,是該行的身體被掃描爲開頭的文字(和如果找到了,做點什麼)。但是,一旦它歸結爲數字2,程序退出並返回一個NullPointerException。

目前,我有這樣的:

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.Statement; 

public class main { 

    public static void main(String[] args) { 
     try { 
      Class.forName("org.sqlite.JDBC"); 
      System.out.println("Load driver success"); 

      Connection connection = DriverManager.getConnection("jdbc:sqlite:data.db"); 

      String query = "Select * from messagesTable"; 
      Statement statement = connection.createStatement(); 
      ResultSet result = statement.executeQuery(query); 

      while(result.next()) { 
       int msgId = result.getInt("_id"); 
       String msgBody = result.getString("body"); 
       String usrId = result.getString("partner_jid"); 
       String grpId = result.getString("bin_id"); 
       if(grpId.equals("group_30")){ 
        System.out.println(msgId); 
        System.out.println(msgBody.toLowerCase().trim()); 
        System.out.println(usrId); 
        if(msgBody.contains("!cmd")){ 
         System.out.println("Command found!"); 
        } 
       } 
      } 
      } catch (Exception e) { 
      System.out.println("Read file error"); 
      e.printStackTrace(); 
     } 
    } 
} 

登錄:

1 
Hello 
jid_2933219 
Read file error 
java.lang.NullPointerException 
    at dysanix.message.scanner.main.main(main.java:26) 

我如何讓它忽略NullPointerException異常,只是繼續下一個?

if(msgBody.contains("!cmd")){ 
    System.out.println("Command found!"); 
} 

如果我刪除此行,它不會給NullPointerException異常,只是打印整個表像它應該,但我需要它做一些事情,當一個!CMD被發現,所以我會怎麼走在做這個?

在此先感謝!

+0

避免通常是最好的預防措施。而不是使用可變的常量慣例(「常量」)使用「常量」.equals(變量)的ihe(我討厭異常)技術。該技術保證永遠不會爲字符串比較拋出空指針異常。 – DwB

+0

另外,開始使用Apache Commons Lang StringUtils類。它提供了很多空字符串方法的安全版本(例如:contains)。 – DwB

回答

3

使用boolean和(&&)在檢查是否包含您的String之前檢查null。類似於

if (msgBody != null && msgBody.contains("!cmd")) { 
    // ... 
} 
+0

這就是答案!我檢查了「null」而不是null。它現在有效!謝謝! –

0

您可以簡單地爲每個字符串添加空檢查;然而這是相當粗糙和不漂亮。如果我是你,我會使用org.apache.commons.lang3包的StringUtils。在那裏你可以做一些事情,比如StringUtils.startsWith或者StringUtils.contains ...等。參見Class。但所有這些檢查對你而言都是NullSafe,而且它們看起來很漂亮,並且爲你做了大部分工作。