Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java忽略数据库中的NullPointerException?_Java_Database_Nullpointerexception - Fatal编程技术网

Java忽略数据库中的NullPointerException?

Java忽略数据库中的NullPointerException?,java,database,nullpointerexception,Java,Database,Nullpointerexception,我是来自C#的Java新手。我一直在想办法,但我做不好 假设我们有一个包含以下内容的表: _id | body | partner_jid | bin_id ---------------------------------------------------------- 1 | Hello | jid_2933219 | group_30 2 | null

我是来自C#的Java新手。我一直在想办法,但我做不好

假设我们有一个包含以下内容的表:

_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
好的,所以基本上需要做的是,扫描行主体以“!cmd”开头的文本(如果找到了,就做些什么)。但是,一旦它降到第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();
        }
    }
}
日志:

如何让它忽略NullPointerException并继续下一个呢

if(msgBody.contains("!cmd")){
   System.out.println("Command found!");
}
如果我删除这一行,它不会给出NullPointerException,只是像它应该的那样打印整个表,但是我需要让它在出现错误时做一些事情!cmd被找到了,我该怎么做呢


提前谢谢

在检查是否包含
字符串之前,使用
布尔值和(
&&&
)检查
null
。差不多

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

使用
布尔值
和(
&&
)检查
空值
,然后再检查它是否包含
字符串
。差不多

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

您可以简单地为每个字符串添加一个空检查;然而,这是相当粗糙和不漂亮的。如果我是你,我会使用org.apache.commons.lang3包的StringUtils。您可以在那里执行StringUtils.StartWith或StringUtils.contains等操作。。。等等,见课堂。但所有这些支票对你来说都是零安全的,而且它们看起来很漂亮,对你来说大部分都有用

您可以简单地为每个字符串添加一个空检查;然而,这是相当粗糙和不漂亮的。如果我是你,我会使用org.apache.commons.lang3包的StringUtils。您可以在那里执行StringUtils.StartWith或StringUtils.contains等操作。。。等等,见课堂。但所有这些支票对你来说都是零安全的,而且它们看起来很漂亮,对你来说大部分都有用

回避往往是最好的预防措施。不要使用variable.equals(“常量”)这一悲伤而常见的做法,而是使用“constant.equals”(变量)这一ihe(我讨厌例外)技术。ihe技术保证不会为字符串比较抛出空指针异常。它提供了许多空安全版本的字符串方法(例如:contains)。避免通常是最好的预防措施。不要使用variable.equals(“常量”)这一悲伤而常见的做法,而是使用“constant.equals”(变量)这一ihe(我讨厌例外)技术。ihe技术保证不会为字符串比较抛出空指针异常。它提供了许多空安全版本的字符串方法(例如:contains)!我检查了“null”而不是null。现在可以了!谢谢这就是答案!我检查了“null”而不是null。现在可以了!谢谢