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)
如果你的报错位置是在if (rst2.next()),那你就要检查执行rst2=stmt.executeQuery(...)的时候rst2是不是不为null了
目前知道就这两点
现在详细解说一下resultset的next()方法,每调用一次,游标后移一个,当resultset游动到最后一行,再调用next()方法会返回false,并且游标也到了最后一行的后面。
ResultSet 对象具有指向其当前数据行的指针。最初,指针被置于第一行之前。next 方法将指针移动到下一行;因为该方法在 ResultSet 对象中没有下一行时返回 false,所以可以在 while 循环中使用它来迭代结果集。默认的 ResultSet 对象不可更新,仅有一个向前移动的指针。因此,只能迭代它一次,并且只能按从第一行到最后一行的顺序进行。可以生成可滚动和/或可更新的 ResultSet 对象。