zoukankan      html  css  js  c++  java
  • 数据库操作基类设计心得

    数据库操作是应用中最多的一个操作,代码也非常冗余,取得连接-建立statement-查询-释放所有资源,所以,这里做了一个基类,见下。

    另外,此次基类的设计有一个心得,就是基类中只能设计成抛出异常,不能将异常处理的try/catch代码也放在基类中,虽然这样作,给将来的继 承类带来一些try/catch的代码的工作量,但还是十分必要的。因为如果将try/catch的代码都放在基类中,那么,可能会出现以下的一些问题:

    1、以后的应用只要数据库操作异常,那么我们记录的日志中所出现的就都是基类的文件名,无法定位到具体是哪个实现类。这对于一个动作要牵动到很多实现类的时候,就不知道到底是那个实现步骤(实现类)出了问题。

    2、如果将异常处理也集成进基类,那么就不能针对每个Action给出各种方式、各种类型的错误返回信息,而这一点是必须在各个Action针对的Bean里面做的。

    3、Thinking in java中也是建议我们将异常处理放在逻辑类中进行的

    4、在实现类中做异常处理,方便扩展,比如有些实现类就要catch其他种类的异常。

    最后给出基类代码:

        /*
        * BaseBean.java
        *
        * Created on 2004年11月11日, 下午3:26
        
    */

        
    package com.jointforce.logic;

        
    import com.jointforce.entity.ECConfig;
        
    import javax.sql.*;
        
    import java.sql.*;
        
    import java.net.*;
        
    import java.io.*;
        
    import java.util.*;
        
    import org.apache.commons.logging.*;

        
    /**
        *
        * 
    @author  Super
        
    */
        
    public class BaseBean {
           
            
    /** Creates a new instance of BaseBean */
            
    public BaseBean() {
            }
           
            
    /*
             * Get a log instance
             * Many beans will extend from basebean
             * so we should define this.getClass here
             
    */
            
    private Log log = LogFactory.getLog(this.getClass());
           
            
    /*
             * Define config info
             
    */
            
    protected ECConfig ecconfig = null;
           
            
    public ECConfig getEcconfig() {
                
    return ecconfig;
            }
            
    public void setEcconfig(Object value) {
                ecconfig 
    = (ECConfig)value;
            }
           
            
    /*
             * Cache JNDI lookup result - DataSource
             
    */
            
    protected DataSource datasource = null;
            
    public DataSource getDatasource() {
                
    return datasource;
            }
            
    public void setDatasource(Object value) {
                datasource 
    = (DataSource)value;
            }
           
            
    // ============================================================= DataBase Operation
            /**
             * The connection of the database
             
    */
            
    protected Connection conn = null;
           
            
    public Connection getConn() throws SQLException {
                
    if (conn == null) {
                    conn 
    = datasource.getConnection();
                }
                
    return conn;
            }
           
            
    /**
             * The container of db statements
             
    */
            
    protected HashMap statements = new HashMap();
            
    /**
             * Get statements from connection
             * the new statement will be registered in statements instance
             * so that we can release all statements in this basebean
             
    */
            
    public Statement getStmt() throws SQLException {
                Statement tmp_stmt 
    = conn.createStatement();
                
    int statements_size = statements.size();
                String register_key 
    = "statement" + Integer.toString(statements_size);
                statements.put(register_key, tmp_stmt);
               
                
    return tmp_stmt;
            }
           
            
    /**
             * The container of db resultset
             
    */
            
    protected HashMap resultsets = new HashMap();
            
    /**
             * Define a temp resultset to be used by classes which extend from basebean
             
    */
            
    protected ResultSet tmp_rst = null;
           
            
    /**
             * do Query action
             
    */
            
    public ResultSet startQuery(String sql) throws SQLException {
                
    // Get DataBase connection first
                getConn();
               
                
    // Create Statement
                Statement tmp_stmt = getStmt();
               
                
    // Get resultset
                ResultSet tmp_rst = tmp_stmt.executeQuery(sql);
                
    //System.out.println(tmp_rst);
                int resultsets_size = resultsets.size();
                String register_key 
    = "resultset" + Integer.toString(resultsets_size);
                resultsets.put(register_key, tmp_rst);
               
                
    return tmp_rst;
            }
           
            
    /**
             * do Update action
             
    */
            
    public void startUpdate(String sql) throws SQLException {
                
    // Get DataBase connection first
                getConn();
               
                
    // Create Statement
                Statement tmp_stmt = getStmt();
               
                tmp_stmt.executeUpdate(sql);
            }
           
            
    /**
             * Release all database resources
             
    */
            
    public void releaseDBResources() throws SQLException {
                
    // Release resultsets
                Iterator it = resultsets.keySet().iterator();
                
    while (it.hasNext())
                {
                    String key 
    = (String)it.next();
                    ResultSet temprs 
    = (ResultSet)resultsets.get(key);
                    
    if (temprs != null) {
                        temprs.close();
                        temprs 
    = null;
                    }
                }
               
                
    // Release statements
                it = statements.keySet().iterator();
                
    while (it.hasNext())
                {
                    String key 
    = (String)it.next();
                    Statement tempst 
    = (Statement)statements.get(key);
                    
    if (tempst != null) {
                        tempst.close();
                        tempst 
    = null;
                    }
                }
               
                
    // Release Connection
                if (conn != null && !conn.isClosed()) {
                    conn.close();
                    conn 
    = null;
                } 
    else if (conn != null) {
                    conn 
    = null;
                }
            }
           
           
            
    // ============================================================= Socket Operation
        }
  • 相关阅读:
    16款优秀的Vue UI组件库推荐
    通过论证:查询字段通常返回引用,该引用可以保证是原来的对象的状态的一部分。分析变量在内存中的变化过程。
    使用XtraReport的CalculatedFiled(计算字段)实现RDLC报表中表达式
    Task:取消异步计算限制操作 & 捕获任务中的异常
    webAPI 自动生成帮助文档
    live writer 博客测试
    c#基础 函数传值
    Google,真的要离我们而去吗?
    匹配中文字符的正则表达式: [/u4e00-/u9fa5]
    希尔排序的实现
  • 原文地址:https://www.cnblogs.com/super119/p/1988607.html
Copyright © 2011-2022 走看看