我正在执行一个代码块,我需要从数据库中检索一组用户并用它们做一些事情。非常简单的场景。
问题是虽然我使用while(rs.next())
,但当rs.next()
达到null时,我的程序会尝试继续使用while子句中的代码并以Null Exception退出。
为什么会这样?我的代码中有什么东西坏了,我无法弄明白吗?
请注意,rs
永远不会null
。在开始时在控制台上打印rs
的所有内容,但是当它到达结尾时它返回null异常。
try {
String sql = "select distinct userid from userinfo";
stmt1 = conn.createStatement();
try (ResultSet rs = stmt1.executeQuery(sql)) {
while (rs.next()) {
String mentionsIDs = (rs.getString("mentions")).trim();
try{
if (!mentionsIDs.isEmpty() ){
System.out.println(mentionsIDs);
String[] arr = mentionsIDs.split("\\s+");
if(isNumeric(arr[0])){
System.out.println(arr[0]);
sources.add(Long.parseLong(arr[0]));
}
}
}
catch(Exception ex){
Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex);
}
}
rs.close();
}
感谢任何帮助。
答案 0 :(得分:0)
您还必须检查结果集是否确实包含一些结果。在while循环上添加一个条件,检查rs是否为null。
if(rs!=null) {
while(rs.next()) {
... Process
}
} else {
System.out.println("The query returned 0 results");
}
在您的代码中:
String sql = "select distinct userid from userinfo";
stmt1 = conn.createStatement();
try (ResultSet rs = stmt1.executeQuery(sql)) {
if(rs!=null) {
while (rs.next()){
String mentionsIDs = (rs.getString("mentions")).trim();
try{
if (!mentionsIDs.isEmpty() ){
System.out.println(mentionsIDs);
String[] arr = mentionsIDs.split("\\s+");
if(isNumeric(arr[0])){
System.out.println(arr[0]);
sources.add(Long.parseLong(arr[0]));
}
}
}
catch(Exception ex){
Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex);
}
}
rs.close();
}
答案 1 :(得分:0)
在try块中移动String mentionsIDs = (rs.getString("mentions")).trim();
然后捕捉NullPointerException
。