这里是部分分页代码!运行时候出错
ResultSet Can Not Re-Read Row Data
大家帮忙看看,小弟谢了
int dipage=1;//当前页码数默认为1 
String pages=request.getParameter("dipage"); 
if(pages==null) 

pages="1"; 

try 

dipage=Integer.parseInt(pages); 

catch(Exception e) 

dipage=1; 

%>
                                <%Connection con; 
Statement stm; 
ResultSet rs; 
try 

Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
}
catch(ClassNotFoundException e)

out.print("类找不到!"); 

try{ con=DriverManager.getConnection("jdbc:microsoft:sqlserver://125.32.112.185:1433;DatabaseName=clinic","lihan","lihan"); stm=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);



   String sq="select * from message order by id desc";
  
 rs=stm.executeQuery(sq); 
 
 int countRecord=0;//记录条数 
int countPageRecord=0;//每页记录条数 
int countPage=1;//总页数  
countPageRecord=10;//每页5条记录,要设置每页记录条数就更改这个变量的值 
rs.last(); 
countRecord=rs.getRow(); 
if(countRecord/countPageRecord==0) 
countPage=countRecord/countPageRecord; 
else 
countPage=countRecord/countPageRecord+1; 
if((dipage-1)*countPageRecord==0) 
rs.beforeFirst(); 
else 
rs.absolute((dipage-1)*countPageRecord); 
%>
                                <% 
int i=0; 
while(rs.next()) 
{i++; 

String address=rs.getString("address");
String telephone=rs.getString("telephone");
String username=rs.getString("username");
String title=rs.getString("title");
String content=rs.getString("content");
String sex=rs.getString("sex");
String email=rs.getString("email");
String messageTime=rs.getString("messageTime").substring(0,19);
String reply=rs.getString("reply");
%>
                                <table width="630" height="50" border="0">
                                  <tr bgcolor="#dddddd">
                                    <td height="10" width="130"><font color="#009944">来自:</font><%=address%></td>
                                    <td width="100"><font color="#009944">姓名:</font><%=username %></td>
<td width="230"><font color="#009944">主题:</font><%=title%></td>
                                    <td><font color="#009944">日期:</font><%=messageTime %></td>
                                  </tr>
                                  <tr bgcolor=#ffffee>
                                    <td colspan="4"><font color="#009944">内容:</font><%=content %></td>
                                  </tr>
                                  <%if(reply!=null){ %>
                                  <tr bgcolor=#CCCCCC>
                                    <td colspan="4" bgcolor="#cffec8"><font color=red><b>医师回复:</b></font><%=reply%></td>
                                  </tr>
                                  <%} %>
                                </table>
                              <%
}
if(i>=countPageRecord) break; //当前页显示完,则退出循环 
}
rs.close();
stm.close(); 
%>
                                <br>
                              <% 
out.print("共"+countRecord+"条留言,共"+countPage+"页,当前第"+dipage+"页,每页"+countPageRecord+"条记录,"); 
if(dipage==1);//当前是首页 
else//当前不是首页 

out.print("<a href=liuyan.jsp?dipage=1><font color=red>首页</font></a>,"); 
out.print("<a href=liuyan.jsp?dipage="+(dipage-1)+"><font color=red>上一页</font></a>,"); 
}
if(dipage==countPage)//当前是末页 

else//当前不是末页 

out.print("<a href=liuyan.jsp?dipage="+(dipage+1)+"><font color=red>下一页</font></a>,"); 
out.print("<a href=liuyan.jsp?dipage="+countPage+"><font color=red>末页</font></a>"); 
}  
con.close(); 
 %>
                                <%

解决方案 »

  1.   

    rs.last(); 
    不能所以操作last和beforeFirst
    rs.beforeFirst(); 
    你可以遍历一次rs,放到list里面然后你在所以读。不会有性能问题放心吧,尤其是想你这么写,更不会有性能问题,
    lz可以适当考虑用类封装下。
      

  2.   

    ...
    stm=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY); 
    ...修改为:stm=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
    建议楼主不要把DB操作代码放在JSP里了,很难维护,像1楼大哥说的那样封装成类,在JSP里调用那个类的方法,取得结果就可以啊
      

  3.   

    jdbc的bug(1)如果采用jdbc-odbc驱动,那么就必须按照查询顺序来一次读取(不论有没有image或text类型)
    (2)如果采用微软提供的ms sql server jdbc driver,如果查询语句中,不存在image或text类型字段,那么可以按照无序获取
    (3)如果采用微软提供的ms sql server jdbc driver,如果查询语句中,存在image或text类型字段,那么就必须按照顺序读取,否则就会报告Driver]ResultSet can not re-read row data for column之类的错误
    (4)如果想不查询语句中有没有image或text类型字段,都可以不按照顺序获取,或重复获取。那么就必须更换驱动,改用第三方的。
      

  4.   

    jtds驱动好像可以重复读
    http://jtds.sourceforge.net/