分頁Bean的同步問題,,請大家幫忙解決

nickcour發表於2004-08-13
請問各位:

我做一個分頁的Bean,在一個頁面上應用沒有問題,但應用在一個框架的網頁上多個頁面同時重新整理或讀取,就出現[Microsoft][SQLServer 2000 Driver for JDBC]No more data available to read
但是我在一個頁面上應用一點事也沒有,那個錯誤,只要重新整理一下出錯的框加就沒有問題,請問大家,這是否一個同部的問題!!

我的Bean是這樣的:

package pmc.xpages;

import java.sql.*;
import javax.servlet.http.*;
import java.util.*;

import pmc.database.*;

public class Fen_Page{
final private String Btn_First="<font face=webdings>9</font>"; //定義第一頁按鈕顯示樣式
final private String Btn_Prev="<font face=webdings>3</font>"; // '定義前一頁按鈕顯示樣式
final private String Btn_Next="<font face=webdings>4</font>"; // '定義下一頁按鈕顯示樣式
final private String Btn_Last="<font face=webdings>:</font>"; // '定義最後一頁按鈕顯示樣式
final private String XD_Align="Center"; // '定義分頁資訊對齊方式
final private String XD_Width="100%"; // '定義分頁資訊框大小

private String Sql_Msg ;

private int Now_Page=1; //當前頁數
private int Total_Page=0; //總頁數
private int PageSize=10; //第頁大小
private int Total_Rec=0; //總記錄數

private HttpServletResponse response;
private HttpServletRequest request;

public Fen_Page(){}
public Fen_Page(int pz,HttpServletResponse res,HttpServletRequest req){
this.PageSize=pz;
this.response=res;
this.request=req;
}

public void setPageSize(int psize){ //設定分頁的大小,每頁多少條記錄
if (psize==0 ){
psize=10;
}
this.PageSize=psize;
}
public int getPageSize(){ //反回每頁多少條記錄
return PageSize;
}

public void setTotal_Rec(int tr){
Total_Rec=tr;
}
public int getTotal_Rec(){
return(Total_Rec);
}
public int getNow_Page(){
return(Now_Page);
}
public void setNow_Page(int np){
Now_Page=np;
}
public synchronized ArrayList getAbsolute(String sql)throws Exception{

ResultSet rs=null;
ResultSetMetaData RSM=null;
ArrayList AL=new ArrayList();
DBConnect dbc=new DBConnect();

int Absolute=1;
try{
dbc.prepareStatement(sql,ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
rs=dbc.executeQuery();
if (rs.next()){
rs.last();
Total_Rec=rs.getRow(); //獲取總記錄數
}

getPageInfo();
Absolute=(Now_Page-1)*PageSize+1; //獲取絕對的記錄地址

RSM = rs.getMetaData();

rs.absolute(Absolute);
rs.previous();

//System.out.println("AbsPage="+Absolute);
//System.out.println("PageSize="+PageSize);
int count=0;
while(rs.next() && count<this.PageSize){
Hashtable htable=new Hashtable();
for (int i=1;i<=RSM.getColumnCount();i++){
String col_Name= RSM.getColumnName(i);
String col_Type=RSM.getColumnTypeName(i);
Object obj=null;
if (col_Type.equals("nvarchar") || col_Type.equals("varchar") || col_Type.equals("text")){
try{
obj=new String(rs.getString(col_Name));
}catch(Exception e){
obj=new String("");
}
}else if ((col_Type.equals("int")) || (col_Type.equals("int identity")) ){
try{
obj=new Integer(rs.getInt(col_Name));
}catch(Exception e){
obj=new Integer(0);
}
}else if (col_Type.equals("money")){
try{
obj=new Float(rs.getFloat(col_Name));
}catch(Exception e){
obj=new Float(0);
}
}else if (col_Type.equals("decimal")){
try{
obj=new Double(rs.getDouble(col_Name));
}catch(Exception e){
obj=new Double(0);
}
}else if (col_Type.equals("datetime")){
try{
obj=rs.getTimestamp(col_Name);
}catch(Exception e){
obj=new String("");
}
}
htable.put(col_Name,obj);
}
AL.add(htable);
count++;
}
rs.close();
}catch(Exception e){
throw new Exception("Bean is Worng!"+e.getMessage());
}finally{
if (rs!=null)rs.close();
dbc.close();
}
return(AL);
}


private void getPageInfo(){

//System.out.println("Total_Rec % PageSize=" + Total_Rec % PageSize);
if (Total_Rec % PageSize==0){ //-------------------------獲取總頁數
Total_Page = Total_Rec/PageSize;
}else{
Total_Page = Total_Rec / PageSize + 1;
//System.out.println("Total_Rec / PageSize + 1=" + Total_Page);
}

String npage=request.getParameter("page");
if ("".equals(npage) || npage==null) {
Now_Page=1;
}else{
Now_Page=Integer.parseInt(npage);
}
if (this.Now_Page>Total_Page) Now_Page=Total_Page;
if (this.Now_Page<1) Now_Page=1; //-------------------------當前頁
}

public String ShowPage(){
String show_tab;
getPageInfo();
show_tab="<table border=0 width=" + XD_Width + "><tr><td align=" + XD_Align + ">";
show_tab+=ShowFirstPrv();
//show_tab+=showNumBtn();
show_tab+=ShowNextLast();
show_tab+=ShowPageInfo();
show_tab+="</td></tr></table>";
return(show_tab);

}

private String ShowFirstPrv(){

String str_tmp="";
int int_prvpage;
if (Now_Page==1){
str_tmp=Btn_First + " " + Btn_Prev;
}else{
int_prvpage=Now_Page-1;
str_tmp="<a href=" + geturl() + "1>" + Btn_First + "</a> <a href=" + geturl() + int_prvpage +">"+ Btn_Prev+"</a>";
}
return(str_tmp);
}

private String ShowNextLast(){
String str_tmp="";
int int_Nextpage;
if (Now_Page==Total_Page){
str_tmp=Btn_Next + " " + Btn_Last;
}else{
int_Nextpage=Now_Page+1;
str_tmp="<a href=" + geturl() + int_Nextpage + ">" + Btn_Next + "</a> <a href=" + geturl() + Total_Page +">"+ Btn_Last+"</a>";
}
return(str_tmp);
}
private String showNumBtn(){
String str_tmp="";
int StartPage=0;
int EndPage=0;

StartPage=Now_Page-4;
EndPage=Now_Page+5;

if (StartPage<=0) StartPage=1;
if (StartPage==1) EndPage=10;
if (EndPage>Total_Page) EndPage=Total_Page ;

for(int i=StartPage;i<=EndPage;i++){
str_tmp=str_tmp + "<a href=" + geturl() + i +">["+i+"]</a> ";
}
return(str_tmp);
}
private String ShowPageInfo(){
String str_tmp;
str_tmp="頁次:" + Now_Page + "/" + Total_Page + "頁 共" + Total_Rec + "條記錄 " + PageSize + "條/每頁";
return(str_tmp);
}

private String geturl(){
String FindString="page=";
String HttpFile;
String queryString;

HttpFile=request.getRequestURI();
HttpFile=HttpFile.substring(HttpFile.lastIndexOf("/")+1); //獲取檔名


queryString=request.getQueryString(); //獲取引數
//System.out.println("queryString=" + queryString);
if ("".equals(queryString) || queryString==null){
HttpFile+="?page=";
}else{
int fs=queryString.lastIndexOf(FindString);

//System.out.println("LastIndexOf(page)==" + fs);

if (fs<0){
//HttpFile+="?" + queryString + FindString;***************************2004/4/27
HttpFile+="?" + queryString + "&page=";
}else{
fs=queryString.lastIndexOf(FindString)-1;
//System.out.println("lastIndexOf(FindString)-2==" + fs);
if (fs<0){
HttpFile+="?page=";
}else{
queryString=queryString.substring(0,fs);
//System.out.println("queryString.substring(1,fs)==" + queryString);
HttpFile+="?" + queryString + "&page=";
}
}
}
return(HttpFile);
}


}

//========以下是使用的JSP

<%
String sql="select * from product ";
Fen_Page fp=new Fen_Page(15,response,request);
ArrayList al=fp.getAbsolute(sql);
out.print(al.size());
for (int i=0;i<al.size();i++){
Hashtable htable=(Hashtable)al.get(i);
out.print(htable.get("ProductName")+"<BR>");
}
%>
<%=fp.ShowPage()%>

相關文章