zoukankan      html  css  js  c++  java
  • 数据库访问 threadlocal模式[参考easydbo]

    JDBCContext类主要解决数据连接的问题
    public class JDBCContext {
        
        private static final Log log = LogFactory.getLog(JDBCContext.class);
        //private Database database;
        private DataSource datasource;
        protected Connection connection;
        private boolean isValid = true;
        private static ThreadLocal<JDBCContext> jdbcContext;
        /**
         * 私有构造函数
         * 
    @param database
         
    */
        private JDBCContext(DataSource datasource){        
            this.datasource = datasource;
            createConnection();        
        }
        public static JDBCContext getJdbcContext(DataSource datasource)
        {        
            
            if(jdbcContext==null)jdbcContext=new JDBCContextThreadLocal(datasource);
            
            JDBCContext context = (JDBCContext) jdbcContext.get();
            if (context == null) {
                
                context = new JDBCContext(datasource);
                
            }
            return context;
        }
        
        private void createConnection(){        
            try{
                
                if(connection == null || connection.isClosed() == true){
                    log.debug("Create a connection");
                    
                    //connection=datasource.getConnection();
                    
    //isValid = true;
                    
                    if(datasource != null){
                        
                            //Class.forName(datasource.getdBType().getDriverclass()).newInstance();
                            
    //connection = DriverManager.getConnection(datasource.getUrl(), datasource.getUser(),datasource.getPassword());
                        connection=datasource.getConnection();
                        isValid = true;
                        
                    }
                    else{
                        log.error("DataSource is invalid");
                        isValid = false;
                        return;
                    }
                }else{
                    log.debug("The current connection is valid.");
                }
            }catch(Exception e){
                e.printStackTrace();
            }
            
        }
        
        /**
         * 释放当前连接;
         
    */
        public void releaseConnection(){
            try{
                if(connection != null && connection.isClosed() == false){
                    connection.close();
                    // 添加代码 by chenying                
                    jdbcContext.remove();
                    isValid = false;
                    log.debug("The connection is closed.");
                }
            }catch(SQLException e){
                e.printStackTrace();
            }
        }
        
        /**
         * 
    @return
         
    */
        public Connection getConnection(){
            
            log.debug("Get a Connection!");
            try{
            if(connection==null || connection.isClosed())createConnection();
            }
            catch(Exception e)
            {
                e.printStackTrace();
            }
            return connection;
        }
        /**
         * 
    @return
         
    */
        public boolean isValid(){
            return isValid;
        }
        
        
        /**
         * 内部类
         * 
    @author Administrator
         *
         
    */
        private static class JDBCContextThreadLocal extends ThreadLocal<JDBCContext> {
            public DataSource datasource;
            public JDBCContextThreadLocal(DataSource datasource)
            {
                this.datasource=datasource;
            }
            protected synchronized JDBCContext initialValue() {            
                return new JDBCContext(datasource);            
            }
        }

    }
  • 相关阅读:
    Database Security: Database Inference
    Database Security: Database Vulnerability
    Database Security: Application Access Assessment
    Database Security :Access Control
    【Database Security 】What Students Need to Know
    数据库原理及安全
    实验十 团队作业6:团队项目系统设计改进与详细设计
    实验九 团队作业5—团队项目需求改进与系统设计
    实验八 团队作业4:基于原型的团队项目需求调研与分析
    实验七 团队作业3:团队项目原型设计与开发
  • 原文地址:https://www.cnblogs.com/chenying99/p/2698644.html
Copyright © 2011-2022 走看看