可能是游标的问题,请帮忙看看?

sayto 2003-09-12 12:08:08
我把出现的问题标在//******位置了

<%
ResultSet sqlRst;//记录集

int intPageSize;//每页显示记录数
int intPage;//当前页数
int intRowCount;//记录总数
int intPageCount;//总页数
int i;

String strPage;
String strSQL;

//设置一页显示的记录数
intPageSize = 20;

//取得待显示页码
strPage = request.getParameter("page");
if(strPage==null){
intPage = 1;
}
else{
intPage = Integer.parseInt(strPage);
if(intPage<1) intPage = 1;
}

//准备SQL语句
strSQL = "select * from gsxw";

//执行SQL语句并获取结果集
sqlRst = myBean.executeQuery(strSQL);

//获取记录总数
sqlRst.last();
intRowCount = sqlRst.getRow();

//记算总页数
intPageCount = (intRowCount+intPageSize-1) / intPageSize;

//调整待显示的页码
if(intPage>intPageCount) intPage = intPageCount;
%>

<%
if(intPageCount>0){
//将记录指针定位到待显示页的第一条记录上
sqlRst.absolute((intPage-1) * intPageSize +1);
i = 0;
while(i<intPageSize && !sqlRst.isAfterLast()){

%>
<%=sqlRst.getString("id")%>"><%=sqlRst.getString("id")%>"> //****问题出现在这里,这什么显示两次或两次以上id就会出错?我想可以是游标的问题,也可能是别的问题,也大家帮忙,谢谢!****
<%
sqlRst.next();
i++;
}
}
%>

<%if(intPage>1){%>
<a href="?page=<%=intPage-1%>">上一页</a>
<%}else{%>
上一页
<%}%>

<%if(intPage<intPageCount){%>
<a href="?page=<%=intPage+1%>">下一页</a>
<%}else{%>
下一页
<%}%>

页次<%=intPage%>/<%=intPageCount%> 共<%=intRowCount%>条

<%
//关闭结果集
sqlRst.close();
%>



//错误提示如下
type Exception report

message Internal Server Error

description The server encountered an internal error (Internal Server Error) that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: No data found
at org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:457)
at org.apache.jsp.gsxw_0005flist$jsp._jspService(gsxw_0005flist$jsp.java:272)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:107)
...全文
80 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
sayto 2003-09-12
  • 打赏
  • 举报
回复
ejbcreate() :

你的第一个方法提示如下:
javax.servlet.ServletException: [Microsoft][ODBC 驱动程序管理器] 无效的游标状态
at org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:457)
at org.apache.jsp.gsxw_0005flist$jsp._jspService(gsxw_0005flist$jsp.java:265)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:107)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)

第二个方法可以,但是再加一个字段或显示三或三个以上同一个字段时出错,错误提示如下:
javax.servlet.ServletException: No data found
at org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:457)
at org.apache.jsp.gsxw_0005flist$jsp._jspService(gsxw_0005flist$jsp.java:273)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:107)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.jasper.servlet.JspServlet$JspServletWrapper.service(JspServlet.

sayto 2003-09-12
  • 打赏
  • 举报
回复
ejbcreate() :

你的第一个方法提示如下:
javax.servlet.ServletException: [Microsoft][ODBC 驱动程序管理器] 无效的游标状态
at org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:457)
at org.apache.jsp.gsxw_0005flist$jsp._jspService(gsxw_0005flist$jsp.java:265)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:107)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)

第二个方法可以,但是再加一个字段或显示三或三个以上同一个字段时出错,错误提示如下:
javax.servlet.ServletException: No data found
at org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:457)
at org.apache.jsp.gsxw_0005flist$jsp._jspService(gsxw_0005flist$jsp.java:273)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:107)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.jasper.servlet.JspServlet$JspServletWrapper.service(JspServlet.

ejbcreate 2003-09-12
  • 打赏
  • 举报
回复
改为下面这样,可能更好些:
<%
if(intPageCount>0){
//将记录指针定位到待显示页的第一条记录上
sqlRst.absolute((intPage-1) * intPageSize +1);
i = 0;
while(i<intPageSize && !sqlRst.isAfterLast() && sqlRst.next()){
//sqlRst.next(); //

%>
<%=sqlRst.getString("id")%>"><%=sqlRst.getString("id")%>"> //****问题出现在这里,这什么显示两次或两次以上id就会出错?我想可以是游标的问题,也可能是别的问题,也大家帮忙,谢谢!****
<%
i++;
}
}
%>
ejbcreate 2003-09-12
  • 打赏
  • 举报
回复
把这句:sqlRst.next(); 放到:<%=sqlRst.getString("id")%>"><%=sqlRst.getString("id")%>"> 前面:

<%
if(intPageCount>0){
//将记录指针定位到待显示页的第一条记录上
sqlRst.absolute((intPage-1) * intPageSize +1);
i = 0;
while(i<intPageSize && !sqlRst.isAfterLast()){
sqlRst.next(); //

%>
<%=sqlRst.getString("id")%>"><%=sqlRst.getString("id")%>"> //****问题出现在这里,这什么显示两次或两次以上id就会出错?我想可以是游标的问题,也可能是别的问题,也大家帮忙,谢谢!****
<%
i++;
}
}
%>
Orchid 2003-09-12
  • 打赏
  • 举报
回复
这跟游标的特性有关吧。也可能跟楼上的说法差不多,我用的是SQL Server数据库,也有这种问题。不知道楼主用的是什么?
这种游标只能按字段顺序访问各个子段,按照记录顺序一条一条访问各条记录,而不能违反这个规定,呵呵,很严格:)
也就是
<%
aa=rs.getString("1");
bb=rs.getString("2");
%>
是可以的,
<%
bb=rs.getString("2");
aa=rs.getString("1");
%>
就是错误的。
<%
aa=rs.getString("1");
aa=rs.getString("1");
%>
也是错误的。

所以,楼主的问题解决方法就是将结果集的值赋到变量上,然后再操作变量就没有限制了。
hesi726 2003-09-12
  • 打赏
  • 举报
回复
<%=sqlRst.getString("id")%>"><%=sqlRst.getString("id")%>"> //****问题出现在这里,这什么显示两次或两次以上id就会出错?我想可以是游标的问题,也可能是别的问题,也大家帮忙,谢谢!****

没有什么好看的!
我估计你使用的 SQL SERVER 数据库!!

我的也这样!别说连续两次,
而且,< %=sqlRst.getString(3)%>"><%=sqlRst.getString(1)%>">
就算是一次,先访问后面的字段,再访问前面的字段,都会这样!!

改改程序吧!
String aa = sqlRst.getString("id");
<%=aa%><%=aa%>
这样子就不会有问题了!

81,090

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧