以前写的通用数据库接口

源代码在线查看: abstractpage.java

软件大小: 99 K
上传用户: wangregret2000
关键词: 通用数据 接口
下载地址: 免注册下载 普通下载 VIP

相关代码

				package util.database.datalist;								import java.sql.*;								/**				 * AbstractPage是一个使用{@link ResultSetPage ResultSetPage}的抽象类。				 * 这个抽象类中的最重要的一个变量是Connection类型的conn,子类必须实现				 * 初始化这个变量的方法。				 * 抽象类中封装了用于分页显示查询结果的大部分操作,包括:				 * 				 * 使用{@link getColumns() getColumns()}取得数组形式的被查询的字段名称				 * 使用{@link getRecords() getRecords()}以二维数组的形式取得页面上显示的数据				 * 使用{@link getNavigator(String) getNavigator(String)}得到导航条的html代码				 * 				 * AbstractPage的子类必须实现下面的抽象方法,包括				 * 				 * 初始化conn的方法{@link initiateConnection() initiateConnection()}				 * 设置查询结果的方法{@link doQuery() doQuery()}				 * 				 * 基本使用方法举例:				 * 				 *          public class ShowPageBean extends AbstractPage				 *          {				 *              public ShowPageBean() throws Exception{}				 *				 *              public void initiateConnection() throws Exception				 *              {				 *                  //使用用户的设定改变默认值countPerPage=5				 *                  this.countPerPage = Config.getCountPerPage();				 *                  this.conn = Pool.getConnection();				 *              }				 *				 *              public ResultSet doQuery() throws Exception				 *              {				 *                  //do some SQL query here				 *                  ResultSet rs = ...				 *                  return rs;				 *              }				 *          }				 * 				 *				 * @author Michael Zeng				 * @version 1.0 September 24, 2002				 */				public abstract class AbstractPage				{				    protected Connection conn = null;				    protected ResultSetPage page = null;				    protected DataList chunk = null;				    protected DataListIterator it = null;								    protected int startIndex = 0, countPerPage = 5;				    protected String navigatorSymbol[] = new String[]{    "<--", "-->" };				    protected String navigatorColor[] = new String[]{  "color:blue","color:red"   };								    public void setStartIndex(int startIndex){    this.startIndex = startIndex;    }				    public int getStartIndex(){    return this.startIndex;    }								    /**				     * protected构造方法				     *				     * @throws Exception				     */				    protected AbstractPage() throws Exception				    {				        initiateConnection();				        page = new ResultSetPage(conn, doQuery());				    }								    /**				     * 抽象方法,用于初始化基类中的Connection对象。使用Template Pattern,具体				     * 实现延迟到子类中定义。				     *				     * @throws Exception				     */				    abstract public void initiateConnection()throws Exception;								    /**				     * 抽象方法,用于设置查询结果。使用Template Pattern,具体实现延迟到				     * 子类中定义。				     *				     * @return ResultSet 用于显示的查询结果				     * @throws Exception				     */				    abstract public ResultSet doQuery() throws Exception;								    /**				     * 得到被查询的字段名称数组				     *				     * @return String[] 字段名称数组				     */				    public String[] getColumns()				    {				        if(page == null)    return new String[0];				        else    return page.getColumns();				    }								    /**				     * 得到指定范围内的结果值。二维数组表示所有的结果值,第一维表示一行独立的记				     * 录,第二维表示一条记录中的每个值。				     *				     * @return String[][] 指定范围内的结果值				     * @throws Exception				     */				    public String[][] getRecords() throws Exception				    {				        if(page == null)    return new String[0][0];								        //取得指定范围的子集,根据子集大小设置返回值的大小				        chunk = page.getListChunk(startIndex, countPerPage);				        String[][] records = new String[chunk.size()][];				        it = chunk.iterator();								        int i = 0;				        while (it.hasNext())				        {				            records[i] = it.next();				            i++;				        }				        return records;				    }								    /**				     * 得到一段分页显示使用的导航条的html代码。默认样式如下:				     * <-- 1 2 3 4 5 -->				     *				     * @param targetPage 需要刷新的页面名称,一般情况是当前页的名称。				     * @return 导航条的html代码				     * @throws SQLException				     */				     public String getNavigator(String targetPage) throws SQLException				    {				        StringBuffer sb = new StringBuffer("");				        //使用Composite Pattern,私有方法对目标StringBuffer进行改写				        appendSymbolNavigator(sb, targetPage, true);				        appendNumNavigator(sb, targetPage);				        appendSymbolNavigator(sb, targetPage, false);								        return sb.toString();				    }								    /**				     * 释放资源(不包括数据库连接)				     *				     * @throws SQLException				     */				    public void close() throws SQLException				    {				        if(page != null)				        {				            page.close();				            page = null;				        }				        if(chunk != null)				        {				            chunk = null;				        }				    }								    /**				     * package方法,在给定的StringBuffer对象末尾追加导航符的html代码。				     *				     * @param sb 给定的StringBuffer对象				     * @param targetPage 需要刷新的页面名称				     * @param isPrevious true表示PREVIOUS符号,false表示NEXT符号				     * @throws SQLException				     */				    protected void appendSymbolNavigator(StringBuffer sb, String targetPage,				                                      boolean isPrevious) throws SQLException				    {				        if(isPrevious && !page.hasPrevious())    return;				        if(!isPrevious && !page.hasNext())  return;								        int targetIndex = startIndex + countPerPage;				        String targetSymbol = navigatorSymbol[1];				        if(isPrevious)				        {				            targetIndex = startIndex - countPerPage;				            targetSymbol = navigatorSymbol[0];				        }								        sb.append("				        sb.append(targetPage).append("?startIndex=").append(targetIndex);				        sb.append("'>").append(targetSymbol).append(" ");				    }								    /**				     * package方法,在给定的StringBuffer对象末尾追加导航页数字的html代码。				     *				     * @param sb 给定的StringBuffer对象				     * @param targetPage 需要刷新的页面名称				     * @throws SQLException				     */				    protected void appendNumNavigator(StringBuffer sb, String targetPage)				            throws SQLException				    {				        int total = page.size()/countPerPage + 1;				        String color = navigatorColor[0];				        for(int i = 0; i < total; i++)				        {				            if( startIndex/countPerPage == i) color = navigatorColor[1];				            else color = navigatorColor[0];				            sb.append("				            sb.append("href='").append(targetPage).append("?startIndex=");				            sb.append(i * countPerPage).append("'>").append(i + 1).append(" ");				        }				    }								}			

相关资源