我是來自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