《實現JSP分頁顯示資料庫》的閱讀筆記

來源:互聯網
上載者:User
js|筆記|分頁|資料|資料庫|顯示 這篇文章介紹的是用javabean和jsp頁面來實現資料的分頁顯示,例子中所使用的資料庫是Mysql。

1、先看javabean

類名:

databaseBean.java:

以下為databaseBean.java的代碼:

package database_basic;
import java.sql.*;
import java.util.*;

public class databaseBean
{
//這是預設的資料庫連接方式
private String DBLocation="jdbc:mysql://localhost/onestoptech?user=root&password=password&useUnicode=true&characterEncoding=GB2312";
private String DBDriver="org.gjt.mm.mysql.Driver";
private Connection conn=null;
public databaseBean(){}

//通過set方法可以靈活設定資料庫的串連
public void setDBLocation(String location){DBLocation=location;}
public void setDBDriver(String driver){DBDriver=driver;}
public void setconn(Connection conn){this.conn=conn;}

public String getDBLocation(){return(DBLocation);}
public String getDBDriver(){return(DBDriver);}
public Connection getconn(){return(conn);}

/*public String DBConnect(){}
public String DBDisconnect(){}
public ResultSet query(String sql){}
public int getTotalPage(String sql,int pageSize){}
public ResultSet getPagedRs(String sql,int pageSize,int pageNumber){}
public String execute_sql(String sql){}*/

//建立串連
public String DBConnect()
{
String strExc="Success!";//strExc預設為Success,如果有例外拋出,即資料庫連接不成功,則下面幾個catch中被賦予其他拋出資訊
try
{
Class.forName(DBDriver);
conn=DriverManager.getConnection(DBLocation);
}
catch(ClassNotFoundException e)
{
strExc="資料庫驅動沒有找到,錯誤提示:<br>" +e.toString();
}
catch(SQLException e)
{

strExc="sql語句錯誤,錯誤提示<br>" +e.toString();
}
catch(Exception e)
{
strExc="錯誤提示:<br>" +e.toString();
}

return (strExc);
}//then end of DBConnect

//中斷連線
public String DBDisconnect()
{
String strExc="Success!";//strExc預設為Success,如果有例外拋出,即資料庫中斷連線不成功,則下面幾個catch中被賦予其他拋出資訊

try
{
if(conn!=null)conn.close();
}
catch(SQLException e)
{
strExc=e.toString();
}
return (strExc);

}



//通過傳入sql語句來返回一個結果集
public ResultSet query(String sql) throws SQLException,Exception
{
ResultSet rs=null;
if (conn==null)
{
DBConnect();
}

if (conn==null)
{
rs=null;
}
else
{
try
{
Statement s=conn.createStatement();
rs=s.executeQuery(sql);
}
catch(SQLException e){throw new SQLException("Cound not execute query.");}
catch(Exception e){throw new Exception("Cound not execute query.");}
}//then end of if
return(rs);
}//then end of the function executeQuery

//通過傳入sql語句和pageSize(每頁所顯示的結果數目)計算並返回總共的頁數
public int getTotalPage(String sql,int pageSize)
{
ResultSet rs=null;
int totalRows=0;
if (conn==null)
{
DBConnect();
}

if (conn==null)
{
rs=null;
}
else
try
{
Statement s=conn.createStatement();

rs=s.executeQuery(sql);//通過傳入的sql得到結果集

while(rs.next())
totalRows++;//讓rs一個個數,數完一遍,通過totalRows++也就計算出了返回結果集中總的條目數
}
catch(SQLException e){}

rs=null;
//由這個演算法得出總頁數(totalRows-1)/pageSize+1,並返回結果。totalRows是指返回結果集中的總的條目數,pageSize是指每頁顯示的條目數
return((totalRows-1)/pageSize+1);
}


//通過傳入sql語句,每頁顯示的條目數(pageSize)和頁碼,得到一個結果集
public ResultSet getPagedRs(String sql,int pageSize,int pageNumber)
{
ResultSet rs=null;
int absoluteLocation;
if (conn==null)
{
DBConnect();
}

if (conn==null)
{
rs=null;
}
else
try
{
Statement s=conn.createStatement();

//pageSize*pageNumber每頁顯示的條目數乘以頁碼,計算出最後一行結果的編號,任何編號大於這個maxrows的結果都會被drop
s.setMaxRows(pageSize*pageNumber);

rs=s.executeQuery(sql);
}
catch(SQLException e){}

//absoluteLocation=pageSize*(pageNumber-1)這個運算式計算出上一頁最後一個結果的編號(如果有本頁的話,上一頁的顯示的結果條目數肯定是pageSize)
absoluteLocation=pageSize*(pageNumber-1);


try
{

//這個for迴圈的作用是讓結果集rs定位到本頁之前的最後一個結果處
for(int i=0;i<absoluteLocation;i++)
{
rs.next();
}
}
catch(SQLException e) { }
//此時返回的結果集被兩頭一夾,就是該頁(pageNumber)要顯示的結果
return(rs);

}


public String execute_sql(String sql){
String strExc;
strExc="Success!";

if(conn!=null)
{
try{
PreparedStatement update;
update=conn.prepareStatement(sql);
update.execute();
}
catch(SQLException e)
{
strExc=e.toString();
}
catch(Exception e)
{
strExc=e.toString();
}
}
else
{
strExc="Connection Lost!";
}
return(strExc);

}//execute_sql


2、分析jsp頁面

頁面名稱:

admin_show.jsp

頁面代碼:

<%@ page errorPage="error.jsp"%>
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.util.*"%>
<%@ page import="java.sql.*"%>
//匯入database_basic包下面的databaseBean類,別名是basicDB
<jsp:useBean id="basicDB" class="database_basic.databaseBean" scope="page"/>
<%
String sql;
ResultSet rs;
int id;
String reply,Exc;
Exc=basicDB.DBConnect();//建立串連,若成功,則返回Success!若失敗,則返回相應出錯資訊

if(!Exc.equals("Success!"))
{
//basicDB.DBDisconnect();
throw new Exception(Exc);
}

int pageSize=10; //定義每頁顯示的資料條數
int currentPage=1; //當前頁(第一次顯示的肯定是第一頁啦!~),以後的“當前頁”由下面出現的頁面中的pages參數傳入
int allPage=-1;
String pages=request.getParameter("pages");//取得頁面中pages參數,此參數代表的頁面的就是要顯示的“當前頁面”

if(pages!=null) currentPage=Integer.valueOf(pages).intValue();//這是一個Integer型轉int型的例子,第一次執行這個頁面的時候,pages這個參數是null,currentPage=1;當再次執行這個頁面的時候,參數pages將被賦值,currentPage=pages的int值

sql="select * from gbook order by id desc";//這樣返回的結果集會採用desc降序排列,好處是,顯示在前面的是最新的資訊

allPage=basicDB.getTotalPage(sql,pageSize);//得到總頁碼數

rs=basicDB.getPagedRs(sql,pageSize,currentPage);//得到當前頁面要顯示的結果集

%>

<table border="0" cellspacing="1" cellpadding="3" width="590" bgcolor="#ffffff">
<%
while(rs.next()){
id=rs.getInt("id");//得到資料庫(結果集)中id編號
%>
<tr bgcolor="#FF6600" style="color:white">
<td >Name:<%=rs.getString("leaver")%></td>
<td >Time:<%=rs.getString("leave_date")%></td>
<td >Email:<%=rs.getString("email")%></td>
<td ><div style="width:150;overflow:hidden;">Home:<%=rs.getString("homepage")%></div></td>
</tr>
<tr bgcolor="#FFE3B9">
<td colspan=4><FONT COLOR="#FF6600">Content:</FONT><BR><BR><%=rs.getString("content")%> </td>
</tr>
<%}%>

<tr><td height="1"></td></tr>
<tr>
<td colspan=4 align=right bgcolor="#FF6600" style="color:white;">
現在是第<%=currentPage%>頁,
<%if(currentPage>1){%>
<!--如果不在第一頁,則顯示出“首頁”連結-->
<A HREF="admin_show.jsp?pages=<%=(currentPage-1)%>">首頁</A>
<%}
for(int i=1;i<=allPage;i++)
{
//顯示出1、2、3、4……到最後一頁的連結
out.println("<a href=admin_show.jsp?pages="+i+">"+i+"</a>");

}

%>
<%if(currentPage<allPage){%>
<!--如果不在最後一頁,則顯示出“末頁”連結-->
<A HREF="admin_show.jsp?pages=<%=(currentPage+1)%>">末頁</A>
<%}%></td>
</tr>
</table>

}//then end of the class


3、總結
這個實現分頁顯示的程式中,有幾個演算法和實現方法是比較固定且經典的,對沒寫過分頁程式的人來說,應該有所啟發。



************************************************************************************************************************
本分析報告由王智偉完成
原文《實現JSP分頁顯示資料庫(mysql)》請見:瀟湘網論壇論壇->web編程--JSP->實現JSP分頁顯示資料庫(mysql)作者:Fred Huang
*************************************************************************************************************************




相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.