2016-04-21 63 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,而且它们看起来很漂亮,并且为你做了大部分工作。