?? javabean實現數據庫分頁.txt
字號:
使用bean可以簡化頁面代碼,將邏輯封裝到bean中,提高了代碼的保密性和系統的安全性,另外由于jsp代碼沒有很好的調試環境,調試比較困難,邏輯代碼封裝到bean中還方便了程序的調試。
這個Bean 使用到了一個自己寫的pool
com.cdc.database.util.*
輸入參數:
setPage(String page) //當前頁碼取得(默認為第一頁)
setPageSize(String size) //設定每頁顯示記錄數目(默認為每頁顯示10條記錄)
setSqlParam(String param) //檢索返回字段(只有一個字段)
setSqlstr(String str) //取得sql語句的檢索條件
setTable(String table) //設定檢索數據表。
返回參數:
getData() //取得記錄集(返回為hashtable, key為順序號)
getPageCount() //返回總頁碼數
getRowCount() //總記錄數
以下為源代碼,請大家指正
package cdcapp;
/**
* 此處插入類型說明。
* 記錄分頁BEAN
* 創建日期:(2001-7-23 9:20:19)
* @author:Administrator
*/
import java.util.*;
import java.io.*;
import java.sql.*;
import com.cdc.database.util.*;
public class PagesBean {
int intPage; //當前頁碼
int intPageSize; //每頁記錄數
int intRowCount; //總記錄數
int intPageCount ; //總頁碼數
String tablename; //數據表名
String sqlstr; //sql語句的檢索條件
String sqlparam; //選取參數
/**
* 此處插入方法說明。
* 取得記錄集(返回為hashtable, key為順序號)
* 創建日期:(2001-7-24 11:19:56)
* @return java.util.Hashtable
*/
public Hashtable getData()
{
Hashtable returnrow = new Hashtable();
Connection conn = null;
try
{
String selectsql;
conn = LocalPool.getConnection(); //連接數據庫
int RowCount = rowcount();
selectsql = selectstr();
intPageCount = (RowCount + intPageSize - 1) / intPageSize; //總頁碼數
PreparedStatement pstmt = conn.prepareStatement(selectsql);
ResultSet rs = pstmt.executeQuery();
if (intPage > RowCount)
intPage = intPageCount; //輸入頁碼數大于總頁碼數的處理
if (intPageCount > 0)
{
int startrow = (intPage - 1) * intPageSize + 1; //開始顯示記錄數
for (int i = 0; i < startrow; i++)
{
rs.next();
} //將記錄指針定位到待顯示頁的第一條記錄上
//判斷字段數據類型
//date型 返回 93
//int型 返回 2
//String型 返回 12
ResultSetMetaData columnType = rs.getMetaData();
int t = 0;
System.out.println("type=" + columnType.getColumnType(1));
if (columnType.getColumnType(1) == 12)
{
//輸出數據
int i = 0;
while (i < intPageSize && !rs.isAfterLast())
{
String ResultSet = rs.getString(1);
//獲取數據寫入hashtable
returnrow.put(new Integer(i),ResultSet);
rs.next();
i++;
}
} else if (columnType.getColumnType(1) == 2)
{
//輸出數據
int i = 0;
while (i < intPageSize && !rs.isAfterLast())
{
int ResultSet = rs.getInt(1);
//獲取數據寫入hashtable
returnrow.put(new Integer(i), new Integer(ResultSet));
rs.next();
i++;
}
} else if (columnType.getColumnType(1) == 93)
{
//輸出數據
int i = 0;
while (i < intPageSize && !rs.isAfterLast())
{
String ResultSet = rs.getDate(1).toString();
//獲取數據寫入hashtable
returnrow.put(new Integer(i), ResultSet);
rs.next();
i++;
}
}
}
pstmt.close();
conn.close();
conn = null;
} catch (SQLException ex)
{
System.out.print("錯誤=");
ex.printStackTrace(System.out);
if (conn != null)
{
try
{
conn.close();
} catch (Exception e)
{
}
}
}
return returnrow;
}
/**
* 此處插入方法說明。
* 返回總頁碼數
* 創建日期:(2001-7-24 13:51:04)
* @return int
*/
public int getPageCount()
{
return intPageCount;
}
/**
* 此處插入方法說明。
* 總記錄數
* 創建日期:(2001-7-24 13:50:09)
* @return int
*/
public int getRowCount()
{
return intRowCount;
}
/**
* 此處插入方法說明。
* 創建日期:(2001-7-23 10:03:58)
* @param args java.lang.String[]
*/
public static void main(String[] args)
{
PagesBean pb = new PagesBean();
pb.setPageSize("10");
pb.setSqlstr(" username like "%%" ");
//pb.setSqlstr(" 版次=10 ");
pb.setTable("t_user");
//pb.setTable("demo");
pb.setSqlParam("passwd");
//pb.setSqlParam("作者");
pb.setPage("2");
Hashtable myarray = pb.getData();
System.out.println("size=" + myarray.size());
int d = 1;
System.out.println("msg=" + myarray.get(new Integer(d)));
int cc = pb.rowcount();
System.out.println("rowcount=" + cc);
System.out.println("pagecount=" + pb.getPageCount());
String[] cq = new String[25];
System.out.println("lent=" + cq.length);
for (int i = 0 ;i<myarray.size();i++ )
{
System.out.println("msg"+i+"=" + myarray.get(new Integer(i)));
}
}
/**
* 此處插入方法說明。
* 返回記錄總數。
* 創建日期:(2001-7-25 8:42:47)
* @return int
*/
private int rowcount()
{
Connection conn = null;
try
{
String countsql; //sql語句計算記錄總數
if (sqlstr == null)
{
countsql = new String("select count(*) " + " from " + tablename);
} else
{
countsql =
new String("select count(*) " + " from " + tablename + " where " + sqlstr);
}
conn = LocalPool.getConnection(); //連接數據庫
PreparedStatement pstmt = conn.prepareStatement(countsql);
ResultSet rs = pstmt.executeQuery();
rs.next();
intRowCount = rs.getInt(1); //總記錄數
rs.close();
pstmt.close();
conn = null;
} catch (Exception ex)
{
System.out.println("錯誤!");
if (conn != null)
{
try
{
conn.close();
} catch (Exception e)
{
}
}
}
return intRowCount;
}
/**
* 此處插入方法說明。
* 返回查詢sql語句.
* 創建日期:(2001-7-26 8:57:39)
* @return java.lang.String
*/
private String selectstr()
{
String sql;
if (sqlstr == null)
{
sql = new String("select " + sqlparam + " from " + tablename);
} else
{
sql =
new String(
"select " + sqlparam + " from " + tablename + " where " + sqlstr);
}
return sql;
}
/**
* 此處插入方法說明。
* 當前頁碼取得(默認為第一頁)
* 創建日期:(2001-7-23 10:14:26)
* @param param int
*/
public void setPage(String page)
{
if (page.trim().length() == 0)//檢查輸入參數是否為空
{
this.intPage = 1;
} else if (page.trim().length() != 0)
{
this.intPage = Integer.parseInt(page);
}
if (this.intPage < 1)
this.intPage = 1;
}
/**
* 此處插入方法說明。
* 設定每頁顯示記錄數目(默認為每頁顯示10條記錄)
* 創建日期:(2001-7-23 10:19:06)
* @param pagenumber int
*/
public void setPageSize(String size)
{
if (size.trim().length() == 0)//檢查輸入參數是否為空
{
this.intPageSize = 10;
} else if (size.trim().length() != 0)
{
this.intPageSize = Integer.parseInt(size);
}
if (this.intPageSize < 1)
this.intPageSize = 10;
}
/**
* 此處插入方法說明。
* 檢索返回字段(只有一個字段)
* 創建日期:(2001-7-24 18:08:02)
* @return java.lang.String
* @param param java.lang.String
*/
public void setSqlParam(String param)
{
if (param.trim().length() != 0)//檢查輸入參數是否為空
{
this.sqlparam = param.trim();
}
}
/**
* 此處插入方法說明。
* 取得sql語句的檢索條件
* 創建日期:(2001-7-23 10:00:30)
* @param sqlstr java.lang.String
*/
public void setSqlstr(String str)
{
if (str.trim().length() != 0) //檢查輸入參數是否為空
{
this.sqlstr = str.trim();
} else
this.sqlstr = new String(" ");
}
/**
* 此處插入方法說明。
* 設定檢索數據表。
* 創建日期:(2001-7-24 10:41:51)
* @param tablename java.lang.String
*/
public void setTable(String table)
{
if (table.trim().length() != 0) //檢查輸入參數是否為空
{
this.tablename = table.trim();
}
}
}
另外還用到localpool源代碼如下
package com.cdc.database.util;
/**
* 在此處插入類型說明。
* 創建日期:(2000-5-16 14:01:56)
* @author:Administrator
*/
import java.sql.*;
import javax.sql.*;
import oracle.jdbc.driver.*;
import oracle.jdbc.pool.*;
import javax.servlet.*;
public class LocalPool
{
private static java.util.ResourceBundle rb = null;
public static OracleConnectionCacheImpl odsU = null;
public static OracleConnectionCacheImpl ods = null;
static
{
try
{
//rb = java.util.ResourceBundle.getBundle("com.cdc.database.util.DatabaseConfig");
String url = "jdbc:oracle:thin:@192.9.200.76:1521:cdc";
String user = "cdc";
String pass = "cdc";
ods = new OracleConnectionCacheImpl();
odsU= new OracleConnectionCacheImpl();
//odsU.setURL(rb.getString("userdb_url"));
//odsU.setUser(rb.getString("userdb_user"));
//odsU.setPassword(rb.getString("userdb_pass"));
odsU.setURL(url);
odsU.setUser(user);
odsU.setPassword(pass);
//ods.setCacheScheme(OracleConnectionCacheImpl.FIXED_WAIT_SCHEME);
// Set the Max Limit
int nMin = 2;
int nMax = 5;
/*
try
{
nMin = Integer.parseInt(rb.getString("userdb_minlimit"));
nMax = Integer.parseInt(rb.getString("userdb_maxlimit"));
}
catch (Exception ex)
{
}
*/
odsU.setMaxLimit(nMax);
odsU.setMinLimit(nMin);
//ods.setURL(rb.getString("url"));
//ods.setUser(rb.getString("user"));
//ods.setPassword(rb.getString("pass"));
ods.setURL(url);
ods.setUser(user);
ods.setPassword(pass);
// Set the Max Limit
nMin = 2;
nMax = 5;
try
{
nMin = Integer.parseInt(rb.getString("minlimit"));
nMax = Integer.parseInt(rb.getString("maxlimit"));
}
catch (Exception ex)
{
}
ods.setMaxLimit(nMax);
ods.setMinLimit(nMin);
}
catch (Exception ex)
{
//throw ex;
ex.printStackTrace(System.out);
}
}
/**
* DBobj 構造子注解。
*/
public LocalPool() {
super();
}
/**
* 當將此對象作為垃圾收集時要執行的代碼。
*
* 完成方法所拋出的任何異常都會導致完成過程
* 停止。但如果是其它異常,則將被忽略。
*/
protected void finalize() throws Throwable {
//在此處插入用來完成接收器的代碼。
//此實現僅把信息轉發給上一級。您可以替換或補充此實現。
super.finalize();
}
/**
* 在此處插入方法說明。
* 創建日期:(01-4-2 22:38:16)
* @return int
*/
static public int getActiveSize()
{
if(ods!=null)
{
return ods.getActiveSize();
}
else
{
return 0;
}
}
/**
* 在此處插入方法說明。
* 創建日期:(01-4-2 22:38:16)
* @return int
*/
static public int getActiveSizeU()
{
if(odsU!=null)
{
return odsU.getActiveSize();
}
else
{
return 0;
}
}
/**
* 在此處插入方法說明。
* 創建日期:(01-4-2 22:39:21)
* @return int
*/
static public int getCacheSize()
{
if(ods!=null)
{
return ods.getCacheSize();
}
else
{
return 0;
}
}
/**
* 在此處插入方法說明。
* 創建日期:(01-4-2 22:39:21)
* @return int
*/
static public int getCacheSizeU()
{
if(odsU!=null)
{
return odsU.getCacheSize();
}
else
{
return 0;
}
}
/**
* 在此處插入方法說明。
* 創建日期:(2000-5-16 14:27:57)
* @return java.sql.Connection
*/
static public Connection getConnection() throws SQLException
{
Connection conn=null;
try
{
if(ods!=null)
{
synchronized(ods)
{
conn = ods.getConnection();
return conn;
}
}
else
{
return null;
}
}
catch(SQLException ex)
{
throw ex;
}
catch (Exception e)
{
throw new SQLException("獲取數據庫連接時出現異常");
}
}
/**
* 在此處插入方法說明。
* 創建日期:(2000-5-16 14:27:57)
* @return java.sql.Connection
*/
static public Connection getConnectionU() throws SQLException
{
Connection conn=null;
try
{
if(odsU!=null)
{
synchronized(odsU)
{
conn = odsU.getConnection();
return conn;
}
}
else
{
return null;
}
}
catch(SQLException ex)
{
ex.printStackTrace(System.out);
throw ex;
}
catch (Exception e)
{
System.out.println("獲取數據庫連接時出現異常");
e.printStackTrace(System.out);
throw new SQLException("獲取數據庫連接時出現異常");
}
}
/**
* 在此處插入方法說明。
* 創建日期:(01-4-3 0:40:59)
*/
static public void reCreatePool() throws SQLException
{
try
{
OracleConnectionCacheImpl ods1 = new OracleConnectionCacheImpl();
ods1.setURL(rb.getString("url"));
ods1.setUser(rb.getString("user"));
ods1.setPassword(rb.getString("pass"));
// Set the Max Limit
int nMin = 50;
int nMax = 200;
try
{
nMin = Integer.parseInt(rb.getString("minlimit"));
nMax = Integer.parseInt(rb.getString("maxlimit"));
}
catch (Exception ex)
{
}
ods1.setMaxLimit(nMax);
ods1.setMinLimit(nMin);
OracleConnectionCacheImpl ods2=ods;
ods=ods1;
synchronized (ods2)
{
if(ods2!=null) ods2.close();
}
ods2=null;
}
catch(Exception ex)
{
ex.printStackTrace(System.out);
}
}
/**
* 在此處插入方法說明。
* 創建日期:(01-4-3 0:40:59)
*/
static public void reCreatePoolU() throws SQLException
{
try
{
OracleConnectionCacheImpl odsU1 = new OracleConnectionCacheImpl();
odsU1.setURL(rb.getString("userdb_url"));
odsU1.setUser(rb.getString("userdb_user"));
odsU1.setPassword(rb.getString("userdb_pass"));
//ods.setCacheScheme(OracleConnectionCacheImpl.FIXED_WAIT_SCHEME);
// Set the Max Limit
int nMin = 10;
int nMax = 100;
try
{
nMin = Integer.parseInt(rb.getString("userdb_minlimit"));
nMax = Integer.parseInt(rb.getString("userdb_maxlimit"));
}
catch (Exception ex)
{
}
odsU1.setMaxLimit(nMax);
odsU1.setMinLimit(nMin);
OracleConnectionCacheImpl odsU2 = odsU;
odsU = odsU1;
synchronized (odsU2)
{
if (odsU2 != null)
odsU2.close();
}
odsU2 = null;
}
catch (Exception ex)
{
ex.printStackTrace(System.out);
}
}
}(
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -