分頁Bean的同步問題,,請大家幫忙解決
請問各位:
我做一個分頁的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()%>
我做一個分頁的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()%>
相關文章
- 請大家幫忙,關於儲存過程分頁的問題...謝謝儲存過程
- 一個jive的安裝問題,整整困了我5天.請大家幫忙解決
- 一道面試題:大家幫忙解決面試題
- jf6.2初學者問題,請大家幫忙看看
- 有關單體模式設計的問題,請大家幫忙模式
- JNDI中Context初始化的問題!請幫幫忙,急需解決!Context
- jms的問題,請高手幫忙解決一下,先謝了
- Jbuilder 問題,請大俠幫忙!!!UI
- 急不理解的問題,大家幫幫忙,關於jive
- 請幫忙解決第一章作者忽略的兩個問題!
- NIO Socket的2個問題?請高手幫忙!
- 請高手幫忙了,關於javamail的問題JavaAI
- 有關java的unicode編碼的問題,大家幫忙JavaUnicode
- 寫FTP上傳的APPLET時,遇到的一個問題!!請幫忙解決FTPAPP
- 請給位大蝦幫忙解決一個log4j問題,急
- 一個郵件的JAVABEAN問題,請高手幫忙JavaBean
- 各位大哥,幫忙解決一下這個問題
- 用jmeter測試webshere下面的jsf出現了問題,請幫忙解決。JMeterWebJS
- 實在是解決不了,請各位高手幫忙
- RMI物件繫結到JNDI的問題,請高手幫忙!物件
- jive配置中的database問題?!請幫忙阿謝謝!Database
- 關於反射的問題,請高手幫忙!線上急等!反射
- 關於digest認證的問題,請高手幫忙
- 又是令人頭痛的字元亂碼問題!!請幫忙!字元
- 紅旗5.0的安裝問題。請高手幫忙(轉)
- 請高手幫忙!
- 一個執行緒的問題。請大俠進來幫幫忙看看執行緒
- java學習中遇到的問題 請高手幫忙 線上等Java
- 請高手幫忙分析一個JSP小程式的問題JS
- 請各路高手幫忙,關於JAVA NIO的方面的問題Java
- 您好, 第一章的一個問題, 清幫忙解決.
- 熟悉ibatis的請幫幫忙!BAT
- 關於分散式異構系統的問題!請幫忙看看分散式
- 高手幫忙解決兩道JAVA題,跪謝!!Java
- 急!!請高手幫忙
- jbuilder高手請幫忙UI
- 請各位高手幫忙!
- 安裝JPETSTORE出錯,請幫忙看看是哪出了問題.