新手请教:JSP访问数据库

数据查询成功,但是输不出来内容,报异常

<%@ 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]