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

PreparedStatementpstmt=conn.prepareStatement(sql);ResultSetrst=stmt.executeQuery("sel... 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)
展开
 我来答
随我心所欲
2010-11-02 · TA获得超过492个赞
知道小有建树答主
回答量:497
采纳率:0%
帮助的人:624万
展开全部
如果你的空指针报错位置是在while(rst.next()),那你就要检查while循环里面是不是对rst做了什么操作有可能会导致rst变成null的

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

目前知道就这两点
可以叫我表哥
推荐于2017-09-27 · 知道合伙人数码行家
可以叫我表哥
知道合伙人数码行家
采纳数:25897 获赞数:1464973
2010年毕业于北京化工大学北方学院计算机科学与技术专业毕业,学士学位,工程电子技术行业4年从业经验。

向TA提问 私信TA
展开全部
  ResultSet是您访问数据库返回的数据表,也就是结果集合,一开始是处于第一行前,beforeFirst,第一次使用next()就将指针指向返回结果集的第一行。因为用java.sql.Statement的executequery()方法查询的结果集永远不会返回null,可以用rs.next()方法来判断有没结果集,因为一个结果集最初将游标定位在第一行的前面。而不用rs==null,这样没有效果。
  现在详细解说一下resultset的next()方法,每调用一次,游标后移一个,当resultset游动到最后一行,再调用next()方法会返回false,并且游标也到了最后一行的后面。
  ResultSet 对象具有指向其当前数据行的指针。最初,指针被置于第一行之前。next 方法将指针移动到下一行;因为该方法在 ResultSet 对象中没有下一行时返回 false,所以可以在 while 循环中使用它来迭代结果集。默认的 ResultSet 对象不可更新,仅有一个向前移动的指针。因此,只能迭代它一次,并且只能按从第一行到最后一行的顺序进行。可以生成可滚动和/或可更新的 ResultSet 对象。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式