数据查询成功,但是输不出来内容,报异常
<%@ page language="java" contentType="text/html; charset=gb2312" pageEncoding="gb2312" errorPage=""%>
学号 |
[b]showStuInfo.jsp[/b]
<%@ page language="java" contentType="text/html; charset=gb2312" pageEncoding="gb2312"%>
<%@ page import="java.sql.*" %>
/jsp:useBean
<%
String number = request.getParameter("number");
String query_sql = "select * from db_Student where Sno = '"+number+"';";
ResultSet rs = queryStu.excuteQuery(query_sql);
//String stu[] = new String[6];
System.out.println(rs.getString(1));
// System.out.println(stu[2]);
// System.out.println(stu[3]);
%>
报的异常是:
select * from db_Student where Sno = '0304060206';
查询成功!---------这两句是在查询数据库的Java文件里面输出来的
就是以下异常就不知道咋回事儿了
2010-5-11 20:23:13 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet jsp threw exception
java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Invalid operation for the current cursor position.
at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)
at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
at com.microsoft.jdbc.base.BaseResultSet.validateCursorPosition(Unknown Source)
at com.microsoft.jdbc.base.BaseResultSet.getString(Unknown Source)
at org.apache.jsp.showStuInfo_jsp._jspService(showStuInfo_jsp.java:76)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:619)
[b]打错了 ,是 “遍历结果集”[/b]
[code="java"]while(rs.next()){
rs.getXXX(1);
rs.getXXX(2);
// .....
}[/code]
[code="java"]ResultSet rs = queryStu.excuteQuery(query_sql);
rs.next(); //加一句
System.out.println(rs.getString(1));[/code]
[color=blue][quote]Invalid operation for the current cursor position.[/quote]
[b]
错误是说,游标指针的位置不对。
因为 ResultSet rs = queryStu.excuteQuery(query_sql);
返回的rs的游标指针在结果集第一行的前面。
所以直接调用rs.getXXX()方法,会报这个错误。
调用一次,rs.next() 游标指针就指向了第一条记录。就可以调用rs.getXXX()方法了。
PS:通常这样变量rs结果集[/b][/color]
[code="java"]while(rs.next()){
rs.getXXX();
// .....
}[/code]
可能是你访问数据库查询出的中有空值。你可以看一下。如果是有空值的话可以用if(变量名==null){。。。}else{。。。}判断以下
当前游标为空,原因是返回的ResultSet对象的游标还在数据集的最上方,需要加一句:[b]rs.next()[/b]
java从数据库中取出数据放在ResultSet中后要判断此ResultSet是否为空,否则就会抛出前面的错误。所以将所写的语句放到程序块:if(!rs.next()){.........}中。
一般是做法是:
String sql="select * from Company_info";
[code="java"] rs=stmt.executeQuery(sql);
while(rs.next()){
String info=rs.getString("info");
out.println("1:"+info);
}[/code]