想做个分页显示的小程序,但在用ResultSet的absolute方法定位到指定页面时,单步测试是报错如下:
Unsupported Method:ResultSet.absolute这是什么原因呢?请前辈指教!
Unsupported Method:ResultSet.absolute这是什么原因呢?请前辈指教!
解决方案 »
- 高手进!!! 在线等!!! jsp 通过radio取text的值
- 新人SQL求助
- javaMail急呀,兄弟们!
- 为什么ie没有打开文件保存对话框
- input垂直居中问题
- 程序中import javax.servlet.jsp.*;编译说打不到package javax.servlet.jsp does not exist
- 关于struts1.1中新特性DispatchAction的问题
- 一个绝对的难题,以前一直没有解决,欢迎各位高手讨论,绝对有使用价值
- java 导出Excel超大文件时 浏览器不弹出下载框
- 我的Struts与hibernate和jsp页面结合时,向数据库添加信息添加了两次
- 请问下拉框联动问题
- 我安装的jforum2.1.6不能分页,怎么回事?
<%@ 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()%>行
共<%=pageCtl.getRowsCount()%>行
第<%=pageNo%>页
共<%=pageCtl.getPagesCount()%>页
<br>
<%
if(pageNo==1) {
out.print(" 首页 上一页 ");
}else {
%>
<a href="javascript:gotoPage(1)">首页</a>
<a href="javascript:gotoPage(<%=pageNo-1%>)">上一页</a>
<%
}
%>
<%
if(pageNo==pageCtl.getPagesCount()) {
out.print("下一页 尾页");
} else {
%>
<a href="javascript:gotoPage(<%=pageNo+1%>)">下一页</a>
<a href="javascript:gotoPage(<%=pageCtl.getPagesCount()%>)">尾页</a>
<%
}
%>
转到第
<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>
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;}
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;
}
}