<%@  page  contentType="text/html;charset=gb2312"%>    
 
<%      
 
//变量声明      
 
java.sql.Connection  sqlCon;  //数据库连接对象      
 
java.sql.Statement  sqlStmt;  //SQL语句对象      
 
java.sql.ResultSet  sqlRst;  //结果集对象      
 
java.lang.String  strCon;  //数据库连接字符串      
 
java.lang.String  strSQL;  //SQL语句      
 
int  intPageSize;  //一页显示的记录数      
 
int  intRowCount;  //记录总数      
 
int  intPageCount;  //总页数      
 
int  intPage;  //待显示页码      
 
java.lang.String  strPage;      
 
int  i,j,k;  //设置一页显示的记录数      
 
intPageSize  =  5;  //取得待显示页码      
 
strPage  =  request.getParameter("page");      
 
if(strPage==null){    
 
//表明在QueryString中没有page这一个参数,此时显示第一页数据      
 
intPage  =  1;      
 
}  else{    
 
//将字符串转换成整型      
 
intPage  =  java.lang.Integer.parseInt(strPage);      
 
if(intPage<1)  intPage  =  1;  }    
 
//装载JDBC-ODBC驱动程序      
 
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");      
 
//设置数据库连接字符串      
 
strCon  =  "jdbc:odbc:Test_DB";      
 
//连接数据库      
 
sqlCon  =  java.sql.DriverManager.getConnection(strCon,"sa","");      
 
//创建SQL语句对象      
 
sqlStmt  =  sqlCon.createStatement();      
 
//获取记录总数      
 
strSQL  =  "select  count(*)  from  guestbook";      
 
sqlRst  =  sqlStmt.executeQuery(strSQL);      
 
//执行SQL语句并取得结果集      
 
sqlRst.next();  //记录集刚打开的时候,指针位于第一条记录之前      
 
intRowCount  =  sqlRst.getInt(1);      
 
sqlRst.close();  //关闭结果集      
 
     
 
//记算总页数      
 
intPageCount  =  (intRowCount+intPageSize-1)  /  intPageSize;      
 
//调整待显示的页码  if(intPage>intPageCount)  intPage  =  intPageCount;      
 
//设置获取数据SQL语句      
 
strSQL  =  "select  name,email,body  from  guestbook";      
 
//执行SQL语句并取得结果集      
 
sqlRst  =  sqlStmt.executeQuery(strSQL);    
 
//将记录指针定位到待显示页的第一条记录上      
 
i  =  (intPage-1)  *  intPageSize;      
 
for(j=0;j<i;j++)  sqlRst.next();  %>      
 
<html>      
 
<head>    
 
<title>JSP数据库操作例程  -  数据分页显示  -  JDBC-ODBC</title>    
 
</head>      
 
<body>      
 
<p  align=center>jdbc-odbc留言版</p>      
 
<table  border="1"  cellspacing="0"  cellpadding="0"  width=600  align=center>      
 
<%      
 
//显示数据      
 
i  =  0;      
 
while(i<intPageSize  &&  sqlRst.next()){  %>      
 
<tr>      
 
<td>姓名:<%=sqlRst.getString(1)%></td>    
 
<td>邮件:<%=sqlRst.getString(2)%></td>    
 
</tr>      
 
<tr>      
 
<td  colspan=2><%=sqlRst.getString(3)%></td>    
 
</tr>    
 
<%  i++;  }  %>    
 
<tr>      
 
<td  colspan=2  align=center>      
 
第<%=intPage%>页    共<%=intPageCount%>页        
 
<%if(intPage<intPageCount){%>    
 
<a  href="mssql.jsp?page=<%=intPage+1%>">下一页</a><%    
 
}    
 
%>        
 
<%if(intPage>1){%>    
 
<a  href="mssql.jsp?page=<%=intPage-1%>">上一页</a><%    
 
}    
 
%>      
 
</td>      
 
</tr>    
 
</table>  </body>      
 
</html>      
 
<%      
 
//关闭结果集      
 
sqlRst.close();      
 
//关闭SQL语句对象      
 
sqlStmt.close();      
 
//关闭数据库    
 
sqlCon.close();    
 
%>

解决方案 »

  1.   

    <%@  page  contentType="text/html;charset=8859_1"  %>  
    <%  
    //变量声明  
    java.sql.Connection  sqlCon;  //数据库连接对象  
    java.sql.Statement  sqlStmt;  //SQL语句对象  
    java.sql.ResultSet  sqlRst;  //结果集对象  
    java.lang.String  strCon;  //数据库连接字符串  
    java.lang.String  strSQL;  //SQL语句  
    int  intPageSize;  //一页显示的记录数  
    int  intRowCount;  //记录总数  
    int  intPageCount;  //总页数  
    int  intPage;  //待显示页码  
    java.lang.String  strPage;  
    int  i;  
    //设置一页显示的记录数  
    intPageSize  =  2;  
    //取得待显示页码  
    strPage  =  request.getParameter("page");  
    if(strPage==null){//表明在QueryString中没有page这一个参数,此时显示第一页数据  
    intPage  =  1;  
    }  
    else{//将字符串转换成整型  
    intPage  =  java.lang.Integer.parseInt(strPage);  
    if(intPage<1)  intPage  =  1;  
    }  
    //装载JDBC驱动程序  
    java.sql.DriverManager.registerDriver(new  oracle.jdbc.driver.OracleDriver());  
    //设置数据库连接字符串  
    strCon  =  "jdbc:oracle:thin:@linux:1521:ora4cweb";  
    //连接数据库  
    sqlCon  =  java.sql.DriverManager.getConnection(strCon,"hzq","hzq");  
    //创建一个可以滚动的只读的SQL语句对象  
    sqlStmt  =  sqlCon.createStatement(java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE,java.sql.ResultSet.CONCUR_READ_ONLY);  
    //准备SQL语句  
    strSQL  =  "select  name,age  from  test";  
    //执行SQL语句并获取结果集  
    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=gb2312">  
    <title>JSP数据库操作例程  -  数据分页显示  -  JDBC  2.0  -  Oracle</title>  
    </head>  
    <body>  
    <table  border="1"  cellspacing="0"  cellpadding="0">  
    <tr>  
    <th>姓名</th>  
    <th>年龄</th>  
    </tr>  
    <%  
    if(intPageCount>0){  
    //将记录指针定位到待显示页的第一条记录上  
    sqlRst.absolute((intPage-1)  *  intPageSize  +  1);  
    //显示数据  
    i  =  0;  
    while(i<intPageSize  &&  !sqlRst.isAfterLast()){  
    %>  
    <tr>  
    <td><%=sqlRst.getString(1)%></td><td><%=sqlRst.getString(2)%></td>  
    </tr>  
    <%  
    sqlRst.next();  
    i++;  
    }  
    }  
    %>  
    </table>  
    第<%=intPage%>页&nbsp;&nbsp;共<%=intPageCount%>页&nbsp;&nbsp;<%if(intPage<intPageCount){%><a  href="jdbc20-oracle.jsp?page=<%=intPage+1%>">下一页</a><%}%>&nbsp;&nbsp;<%if(intPage>1){%><a  href="jdbc20-oracle.jsp?page=<%=intPage-1%>">上一页</a><%}%>  
    </body>  
    </html>  
    <%  
    //关闭结果集  
    sqlRst.close();  
    //关闭SQL语句对象  
    sqlStmt.close();  
    //关闭数据库  
    sqlCon.close();  
    %>
      

  2.   

    To  xunyiren(从jsp开始) 
    先多谢你的解答,但是有点问题继续请教:
    第一种方法:
       sqlRst.next();  //记录集刚打开的时候,指针位于第一条记录之前 
       intRowCount  =  sqlRst.getInt(1);
      好像不是取得总记录数吧??
    第二种方法:
     sqlRst.last();  
     intRowCount  =  sqlRst.getRow();  
      当用这种方法的时候,网页一有这两句话的时候就是空白,
    为什么呢,是否还有其它的地方没设置好呢 ???
      

  3.   

    问题已经解决了,必须Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);