我是来自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被发现,所以我会怎么走在做这个?
在此先感谢!
避免通常是最好的预防措施。而不是使用可变的常量惯例(“常量”)使用“常量”.equals(变量)的ihe(我讨厌异常)技术。该技术保证永远不会为字符串比较抛出空指针异常。 – DwB
另外,开始使用Apache Commons Lang StringUtils类。它提供了很多空字符串方法的安全版本(例如:contains)。 – DwB