关于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) 展开
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) 展开
推荐于2017-09-27 · 知道合伙人数码行家
可以叫我表哥
知道合伙人数码行家
向TA提问 私信TA
知道合伙人数码行家
采纳数: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 对象。
现在详细解说一下resultset的next()方法,每调用一次,游标后移一个,当resultset游动到最后一行,再调用next()方法会返回false,并且游标也到了最后一行的后面。
ResultSet 对象具有指向其当前数据行的指针。最初,指针被置于第一行之前。next 方法将指针移动到下一行;因为该方法在 ResultSet 对象中没有下一行时返回 false,所以可以在 while 循环中使用它来迭代结果集。默认的 ResultSet 对象不可更新,仅有一个向前移动的指针。因此,只能迭代它一次,并且只能按从第一行到最后一行的顺序进行。可以生成可滚动和/或可更新的 ResultSet 对象。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询