功能:
读取数据库的表记录,并将记录分页显示
通过ResultSet的absolute()方法选择要显示的内容的第一条记录
数据结构:
int intPage; //待显示的页码
int intPageCount; //要显示的页总数
int intRowCount; //记录总数
int intPageSize; //每页的记录数
实现代码如下:
<%@page import="java.sql.*"%>
<%@ page language="java" contentType="text/html; charset=gbk"
pageEncoding="gbk"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%
Connection sqlCon;
Statement sqlStmt;
ResultSet sqlRst;
String strCon;
String strSQL;
int intPageSize;//一页显示的记录数
int intRowCount;//记录总数
int intPageCount;//总页数
int intPage;//待显示页数
String strPage;
int i;
intPageSize=2;
strPage = request.getParameter("page");
if(strPage==null){
intPage=1;
}
else{
intPage=Integer.parseInt(strPage);
if(intPage<1)intPage=1;
}
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
strCon="jdbc:oracle:thin:@localhost:1521:orcl";
sqlCon=DriverManager.getConnection(strCon,"dbsnmp","dbsnmp");
sqlStmt=sqlCon.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
strSQL="select * from mytest2";
sqlRst=sqlStmt.executeQuery(strSQL);
sqlRst.last();
intRowCount=sqlRst.getRow();
intPageCount=(intRowCount+intPageSize-1)/intPageSize;
if(intPage>intPageCount)intPage=intPageCount;
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gbk">
<title>JSP数据库</title>
</head>
<body>
<%
request.setCharacterEncoding("ISO-8859-1");
if(intPageCount>0){
sqlRst.absolute((intPage-1)*intPageSize+1);
i=0;
while(i<intPageSize&&!sqlRst.isAfterLast()){
%>
<br>
<%=sqlRst.getString(1) %><br><%=sqlRst.getString(2) %>
<%
sqlRst.next();
i++;
}
}
%>
<br>第<%=intPage %>页 共<%=intPageCount %>页
<%if(intPage<intPageCount){ %>
<a href="jspOracleB.jsp?page=<%=intPage+1 %>">下一页</a>
<%} %>
<%if(intPage>1){ %>
<a href="jspOracleB.jsp?page=<%=intPage-1 %>">上一页</a>
<%} %>
</body>
<%
sqlRst.close();
sqlStmt.close();
sqlCon.close();
%>
</html>
学习收获:
ResultSe:
absolute(int row)
将光标移动到此 ResultSet
对象的给定行编号
isAfterLast()
获取光标是否位于此 ResultSet
对象的最后一行之后。
last()
将光标移动到此 ResultSet
对象的最后一行。
CONCUR_UPDATABLE
该常量指示可以更新的 ResultSet
对象的并发模式。
TYPE_SCROLL_SENSITIVE
该常量指示可滚动并且通常受 ResultSet
底层数据更改影响的 ResultSet
对象的类型。