想做个分页显示的小程序,但在用ResultSet的absolute方法定位到指定页面时,单步测试是报错如下:
                 
                 Unsupported Method:ResultSet.absolute这是什么原因呢?请前辈指教!

解决方案 »

  1.   

    *****page.jsp********
    <%@ page language="java" contentType="text/html;charset=GB2312"%>
    <%@ page import="java.util.*"%>
    <%@ page import="ch14.*"%>
    <%@ page import="ch14.*"%>
    <%@ page import="book.*"%>
    <html>
      <head>
        <title>分页显示测试页面</title>
        <meta http-equiv="Content-Type" content="text/html;charset=GB2312">
      </head>
      <body>
      <center>
      
      <%
    int pageNo = 1;
    String strPage = request.getParameter("jumpPage");
    if (strPage != null) {
    pageNo = Integer.parseInt(strPage);
    }
    Pagination pageCtl = new bookpage();
    pageCtl.setRowsPerPage(3);
    pageCtl.setSQL("SELECT * FROM books");
        Collection students = pageCtl.getPage(pageNo);
        Iterator allStu = students.iterator();
      %>  <h2>student表的查询结果分页显示:</h2>
      
      <!--Student List-->
      <table width="740" border="1" cellspacing="0" cellpadding="6">
        <tr> 
          <td width="120" align="center" valign="middle">编号</td>
          <td width="145" align="center">姓名</td>
          <td width="253" align="center">地址</td>
          <td width="148" align="center">出生日期</td>
        </tr>
        <%
          while (allStu.hasNext()) { 
            book stu = (book)allStu.next();
        %>
        <tr> 
          <td height="40" align="center" valign="middle"><%=stu.getId()%></td>
          <td align="center" valign="middle"><%=stu.getName()%></td>
          <td valign="middle"><%=stu.getTitle()%></td>
          <td align="center" valign="middle"><%=stu.getPrice()%></td>
        </tr>
        <%
          } 
        %>
      </table>
      
      <form action="paginationTest.jsp" method="post" name="PageForm">    每页<%=pageCtl.getRowsPerPage()%>行&nbsp;
        共<%=pageCtl.getRowsCount()%>行&nbsp;
        第<%=pageNo%>页&nbsp;
        共<%=pageCtl.getPagesCount()%>页
        <br>
        <%
          if(pageNo==1) { 
         out.print(" 首页  上一页 "); 
          }else {  
        %>   
         <a href="javascript:gotoPage(1)">首页</a>&nbsp;
         <a href="javascript:gotoPage(<%=pageNo-1%>)">上一页</a>&nbsp;
        <%
          }
        %>
        <%
          if(pageNo==pageCtl.getPagesCount()) { 
         out.print("下一页  尾页");   
          } else {  
        %>   
         <a href="javascript:gotoPage(<%=pageNo+1%>)">下一页</a>&nbsp;
         <a href="javascript:gotoPage(<%=pageCtl.getPagesCount()%>)">尾页</a>
        <%
          }
        %>
        &nbsp;转到第
        <select name="jumpPage" onchange="Jumping()">
        <%
          for(int i=1; i<=pageCtl.getPagesCount(); i++) {
          if (i == pageNo) {
        %>
          <option selected value=<%=i%>><%=i%></option>
        <%
         } else {
        %>
          <option value=<%=i%>><%=i%></option>
        <%
         }
          }
        %>   
        </select>页
      </form>
      
      </center> 
      </body>
    </html><Script Language="JavaScript">
      function Jumping(){
        document.PageForm.submit();
       return ;
      }  function gotoPage(pagenum){
       document.PageForm.jumpPage.value = pagenum;
       document.PageForm.submit();
       return ;
      }
    </Script>
      

  2.   

    package book;
    import java.sql.*;
    import java.util.*;
    import ch14.*;public abstract class Pagination {
    private String sql;
    private int rowsPerPage; // 每页显示的行数
    private int rowsCount;   // 总行数
    private int pagesCount;  // 总页数 public void setRowsPerPage(int rowsPerPage) {
    this.rowsPerPage = rowsPerPage;
    } // 在设置SQL语句时计算总行数和总页数,
    // 这样总行数只要查询一次,可以提高效率!
    public void setSQL(String sql) throws SQLException {
    this.sql = sql;
    this.rowsCount = 0;
    this.pagesCount = 0; // 获取总行数并计算总页数
    this.rowsCount = countRows();
    this.pagesCount = countPages();
    } public String getSQL() {
    return sql;
    } public int getRowsPerPage() {
    return rowsPerPage;
    } public int getRowsCount() {
    return rowsCount;
    } public int getPagesCount() {
    return pagesCount;
    } public Collection getPage(int page) throws SQLException {
    Collection result = new ArrayList(); Connection conn = SqlTestDS.getConnection();
    Statement stmt = conn.createStatement(); // 根据页号计算起始行
    int startRow = (page - 1) * getRowsPerPage() + 1;
    int rows = this.getRowsPerPage(); // 将SQL语句转换为特定数据库的定位行集SQL语句
    String pageSql = MySqlPageSQL.getPageSQL(this.sql, startRow, rows);
    ResultSet rs = stmt.executeQuery(pageSql); // 将结果集包装为对象集合
    result = packResultSet(rs); rs.close();
    stmt.close();
    conn.close(); return result;
    } private int countRows() throws SQLException {
    String countSql = this.sql;
    countSql = countSql.toLowerCase();
    int fromPos = countSql.indexOf(" from ");
    countSql = countSql.substring(fromPos);
    countSql = "select count(*) " + countSql; Connection conn = SqlTestDS.getConnection();
    Statement stmt = conn.createStatement();
    ResultSet rs = stmt.executeQuery(countSql); rs.first();
    int count = rs.getInt(1); rs.close();
    stmt.close();
    conn.close(); return count;
    } // 计算总页数
    private int countPages() {
    if ((rowsCount % rowsPerPage) == 0) {
    return rowsCount / rowsPerPage;
    } else {
    return (rowsCount / rowsPerPage + 1);
    }
    }    // 在子类中将结果集包装为对象集合
    protected abstract Collection packResultSet(ResultSet rs)
    throws SQLException;}
      

  3.   

    book.java
    package ch14;import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.Date;public class book {
    private String id;
    private String name;
    private String title;
    private Date price;

    // 获得所有student表的记录返回为一个Vector
    public static Collection getAllStudent() {
    Collection stuVector = new ArrayList(); Connection conn = null;
    Statement stmt = null;

    try {
    conn = SqlTestDS.getConnection();
    if (conn != null) {
    stmt = conn.createStatement();
    ResultSet rs = stmt.executeQuery("SELECT * FROM books");
    while (rs.next()) {
    book stu = new book();
    stu.setId(rs.getString(1));
    stu.setName(rs.getString(2));
    stu.setTitle(rs.getString(3));
    stu.setPrice(rs.getDate(4));

    stuVector.add(stu);
    }

    }

    } catch(SQLException e) {
    e.printStackTrace();
    }

    return stuVector;
    } public String getId() {
    return id;
    } public void setId(String id) {
    this.id = id;
    } public String getName() {
    return name;
    } public void setName(String name) {
    this.name = name;
    } public Date getPrice() {
    return price;
    } public void setPrice(Date price) {
    this.price = price;
    } public String getTitle() {
    return title;
    } public void setTitle(String title) {
    this.title = title;

    }