关于Resultset next()方法,空指针问题

PreparedStatement pstmt = conn.prepareStatement(sql);
ResultSet rst = stmt.executeQuery("select bus_id from bus_all where line_id='" + lineid + "' and bus_id <> '"+ busid+"'");
while(rst.next()){ //第一次循环没问题,但第二次循环rst.next()报空指针,结果集应该有3条,如果到最后一条也不应该报空指针啊~请高手指教
String busid_str = rst.getString("bus_id").toString();
rst2=stmt.executeQuery("select * from BUS_DIRECTION where busid="
+ "'" + busid_str + "'");
if (rst2.next()) {
int i=stmt.executeUpdate("delete BUS_DIRECTION where busid='"+busid_str+"'");
}
pstmt.setString(1, busid_str);
pstmt.setString(2, end_station);
.... pstmt.addBatch();
}

异常信息:
java.lang.NullPointerException
at oracle.jdbc.driver.ScrollableResultSet.cacheRowAt(ScrollableResultSet.java:2086)
at oracle.jdbc.driver.ScrollableResultSet.isValidRow(ScrollableResultSet.java:2060)
at oracle.jdbc.driver.ScrollableResultSet.next(ScrollableResultSet.java:347)
at oracle.jdbc.driver.SensitiveScrollableResultSet.next(SensitiveScrollableResultSet.java:80)
at dep.beans.B_Scheme_Update.Copy_bus_direction(B_Scheme_Update.java:11334)
at org.apache.jsp.Scheme.base_005finformation.banci.MSIE_005fXML_005ftree.banci_005fdirection_jsp._jspService(banci_005fdirection_jsp.java:104)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

如果你的空指针报错位置是在while(rst.next()),那你就要检查while循环里面是不是对rst做了什么操作有可能会导致rst变成null的

如果你的报错位置是在if (rst2.next()),那你就要检查执行rst2=stmt.executeQuery(...)的时候rst2是不是不为null了

目前知道就这两点
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-09-27
  ResultSet是您访问数据库返回的数据表,也就是结果集合,一开始是处于第一行前,beforeFirst,第一次使用next()就将指针指向返回结果集的第一行。因为用java.sql.Statement的executequery()方法查询的结果集永远不会返回null,可以用rs.next()方法来判断有没结果集,因为一个结果集最初将游标定位在第一行的前面。而不用rs==null,这样没有效果。
  现在详细解说一下resultset的next()方法,每调用一次,游标后移一个,当resultset游动到最后一行,再调用next()方法会返回false,并且游标也到了最后一行的后面。
  ResultSet 对象具有指向其当前数据行的指针。最初,指针被置于第一行之前。next 方法将指针移动到下一行;因为该方法在 ResultSet 对象中没有下一行时返回 false,所以可以在 while 循环中使用它来迭代结果集。默认的 ResultSet 对象不可更新,仅有一个向前移动的指针。因此,只能迭代它一次,并且只能按从第一行到最后一行的顺序进行。可以生成可滚动和/或可更新的 ResultSet 对象。
相似回答