难者不会,会者不会系列问题——JDBC小问题。大家展开讨论一下,

orant 2004-01-12 03:13:05
我在JSP中的分页程序用到absolute()方法。
但报错:
[Microsoft][SQLServer 2000 Driver for JDBC]Invalid operat
ion for the current cursor position.java.sql.SQLException:

java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Unsupported method: ResultSet.absolute

我现在想知道用代码怎么替代absolute()?
如果保留absolute()方法,哪里有支持SQLSERVER的驱动。
...全文
44 点赞 收藏 14
写回复
14 条回复
gdx 2004年01月14日
可以用Hibernate或OJB等ORM工具,它对不同的数据库如DB2\SQLServer\Oracle等的JDBC语句作了优化,如果你有兴趣,可以查看代码是如何实现的.
分页不是SQL的语法标准吧,不同的数据库的语句写法不同!
回复 点赞
huiyannan 2004年01月14日
up
回复 点赞
ncepu158wyf 2004年01月14日
select top 这个方法不好吗
回复 点赞
zhwquan 2004年01月14日
是呀,分页mysql用limit,oracle 用rownum,sql server没有好办法哦!
回复 点赞
mxlmwl 2004年01月14日
<%@page contentType="text/html;charset=gb2312"%>
<%@page import="java.sql.*"%>
<jsp:useBean id="test" scope="page" class="OT.OraTest" />
<%
int PageSize=4;//设置每张网页显示4条记录
int ShowPage=1;//设置欲显示的页数
int RowCount=0;//ResultSet 的记录条数
int PageCount=0;//ResultSet 分页后的总页数

ResultSet rs;
rs=test.excuteQuery("select * from fei");
if(rs.next())
{
rs.last();
RowCount=rs.getRow();
PageCount=((RowCount%PageSize)==0?(RowCount/PageSize):(RowCount/PageSize)+1);//计算显示的页数


String ToPage=request.getParameter("ToPage");
if(ToPage!=null)
{
ShowPage=Integer.parseInt(ToPage);//取得指定显示的分页页数
//下面的语句用于判断使用者在文本框中输入的页数是否正确
if(ShowPage>PageCount)//判断指定页数是否大于总页数,是则设置显示最后一页
{
ShowPage=PageCount;
}
else if(ShowPage<=0)//若指定页数小于0,则设置显示第一页的记录
{
ShowPage=1;
}
}
rs.absolute((ShowPage-1)*PageSize+1);//计算欲显示页的第一条记录的位置
%>
共有<%=RowCount%>个企业 
<%
if(RowCount<=PageSize)
{
%>
首页  前一页  后一页  尾页 
<%
}
else
{
if(ShowPage!=1)//判断目前页面是否为第一页,如果不是则执行
{
if(ShowPage!=PageCount)//判断是否为最后一页,如果不是则执行
{
%>
<a href="test.jsp?ToPage=<%=1%>">首页</a>  <a href="test.jsp?ToPage=<%=ShowPage-1%>">前一页</a>  <a href="test.jsp?ToPage=<%=ShowPage+1%>">后一页</a>  <a href="test.jsp?ToPage=<%=PageCount%>">尾页</a>
<%
}
else
{
%>
<a href="test.jsp?ToPage=<%=1%>">首页</a>  <a href="test.jsp?ToPage=<%=ShowPage-1%>">前一页</a>  后一页  尾页 
<%
}
}
else
{
%>
首页  前一页  <a href="test.jsp?ToPage=<%=ShowPage+1%>">后一页</a>  <a href="test.jsp?ToPage=<%=PageCount%>">尾页</a>
<%
}
}
%>
共<%=PageCount%>页
<form action="test.jsp" method=post name="form1">
第<input type="text" name="ToPage" value="<%=ShowPage%>">页
<input type="submit" value="跳至">
</form>
<%/*********************************************************取出数据*************************************************************/%>
<%
for(int i=1;i<=PageSize;i++)//利用 for 循环配合PageSize属性输出一页中的记录
{
String id=rs.getString("id");
out.println(id);
if(!rs.next())//判断是否到达最后一条记录(目的:用于防止输出最后一页记录时,将记录指针移动到最后一条记录之后
break;
}
rs.close();
}
else
{
out.println("没有数据!");
}
%>
我做的分页程序,适合与少量数据。如果有大量数据的话,请用oracle的rownum来实现。
回复 点赞
寒冬 2004年01月12日
up
回复 点赞
orant 2004年01月12日
加油贴,明天下班前结贴
回复 点赞
jokerjava 2004年01月12日
楼上的还比不上用absolute()呢
回复 点赞
jokerjava 2004年01月12日
这个方法jdbc的标准接口吧

用代码实现 去做个数据库 在做个jdbc驱动包
很轻松就能实现 呵
回复 点赞
寒冬 2004年01月12日
如不用,
你可以用一个循环,来代替
for (int i = 1; i <= (pageId * pageSize); i++) {
if (i <= ( (pageId - 1) * pageSize)) {
rs.next();
}
}
回复 点赞
orant 2004年01月12日
如果用代码实现干吗不谈谈啊加油啊
回复 点赞
loveyousomuch 2004年01月12日
楼上2位都已经说了!
回复 点赞
wjfxiao 2004年01月12日
需要这样生成你的statement实例:
Statement stmt = con.createStatement(
ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
//如果不允许修改,则这样:
Statement stmt = con.createStatement(
ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_READ_ONLY);
然后就可以使用absolute()方法了
回复 点赞
youthy_yy 2004年01月12日
本来就支持啊,你的statement没有使用可滚动游标吧?
stmt=dbc.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
回复 点赞
发动态
发帖子
Web 开发
创建于2007-09-28

5.2w+

社区成员

34.1w+

社区内容

Java Web 开发
社区公告
暂无公告