Java jdbc数据库连接池(R2原理)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

Javajdbc数据库连接池完整实现(R2原理)北京师范大学计算机系张人杰前言:网上流传着一些jdbc数据库连接池的实现,纵观所有,其操作方式、流程均对原有jdbc的操作方式、流程做了改变,也即在用完一个connection后,不能调用close方法对其关闭,而必须调用连接池对象的pool.free(connection)方法放回连接池pool。这在单个连接池时不显麻烦。但在多个连接池或连接池对象无法传入调用的方法时,释放连接就会显得非常麻烦。前段时间,出于兴趣,本人开发了一套jdbc的数据库连接池R2,在此与大家分享。设计思想:1、基本思想为通过代理的方式,对原数据库真实连接conn对象进行包装,改写close方法,在Connection对象调用此方法时将真实连接conn放回连接池;2、在通过getConnection方法获得一个真实连接时,对其进行包装,返回R2Connection对象;3、R2Connection实现java.sql.Connection接口,完全参照jdbc标准,除close方法外,所有方法均直接调用真实连接conn进行操作。4、R2Pool为产生数据库连接的工厂类,处理:控制连接池中的连接数,定时清理空闲连接,保持连接等操作。(下载地址:)代码讲解:R2Connection类,对原真实Connection的包装/***R2jdbcconnectionclass,toreplacethedefaultjdbcconnectionandreplacetheclosefunction*R2连接池,链接包装类,处理close方法*@author张人杰北京师范大学计算机系*alex.zhangrj@hotmail.com*alex.zhangrjBeijingNormalUniversity*2011/11/26*/publicclassR2ConnectionimplementsConnection{privateConnectionconn=null;privateR2Poolpool=null;publicvoidsetConnection(ConnectionjdbcConn){//真实连接对象this.conn=jdbcConn;}publicvoidsetPool(R2Poolpool){//连接来源(连接池)的引用this.pool=pool;}@OverridepublicvoidclearWarnings()throwsSQLException{if(conn!=null)conn.clearWarnings();}@Overridepublicvoidclose()throwsSQLException{//关闭链接时,不实际关闭Connection,而把其放入连接池中synchronized(this){if(conn!=null)pool.releaseConnection(conn);conn=null;}}/***关闭jdbc真实链接*@throwsSQLException*/publicvoidcloseJdbcConnection()throwsSQLException{//关闭jdbc真实链接if(conn!=null)conn.close();conn=null;}@Overridepublicvoidcommit()throwsSQLException{if(conn!=null)conn.commit();}@OverridepublicArraycreateArrayOf(StringtypeName,Object[]elements)throwsSQLException{if(conn!=null)returnconn.createArrayOf(typeName,elements);returnnull;}@OverridepublicBlobcreateBlob()throwsSQLException{if(conn!=null)returnconn.createBlob();returnnull;}@OverridepublicClobcreateClob()throwsSQLException{if(conn!=null)returnconn.createClob();returnnull;}@OverridepublicNClobcreateNClob()throwsSQLException{if(conn!=null)returnconn.createNClob();returnnull;}@OverridepublicSQLXMLcreateSQLXML()throwsSQLException{if(conn!=null)returnconn.createSQLXML();returnnull;}@OverridepublicStatementcreateStatement()throwsSQLException{if(conn!=null)returnconn.createStatement();returnnull;}@OverridepublicStatementcreateStatement(intresultSetType,intresultSetConcurrency)throwsSQLException{if(conn!=null)returnconn.createStatement(resultSetType,resultSetConcurrency);returnnull;}@OverridepublicStatementcreateStatement(intresultSetType,intresultSetConcurrency,intresultSetHoldability)throwsSQLException{if(conn!=null)returnconn.createStatement(resultSetType,resultSetConcurrency,resultSetHoldability);returnnull;}@OverridepublicStructcreateStruct(StringtypeName,Object[]attributes)throwsSQLException{if(conn!=null)returnconn.createStruct(typeName,attributes);returnnull;}@OverridepublicbooleangetAutoCommit()throwsSQLException{if(conn!=null)returnconn.getAutoCommit();returnfalse;}@OverridepublicStringgetCatalog()throwsSQLException{if(conn!=null)returnconn.getCatalog();returnnull;}@OverridepublicPropertiesgetClientInfo()throwsSQLException{if(conn!=null)returnconn.getClientInfo();returnnull;}@OverridepublicStringgetClientInfo(Stringname)throwsSQLException{if(conn!=null)returnconn.getClientInfo(name);returnnull;}@OverridepublicintgetHoldability()throwsSQLException{if(conn!=null)returnconn.getHoldability();return0;}@OverridepublicDatabaseMetaDatagetMetaData()throwsSQLException{if(conn!=null)returnconn.getMetaData();returnnull;}@OverridepublicintgetTransactionIsolation()throwsSQLException{if(conn!=null)returnconn.getTransactionIsolation();return0;}@OverridepublicMapString,Class?getTypeMap()throwsSQLException{if(conn!=null)returnconn.getTypeMap();returnnull;}@OverridepublicSQLWarninggetWarnings()throwsSQLException{if(conn!=null)returnconn.getWarnings();returnnull;}@OverridepublicbooleanisClosed()throwsSQLException{if(conn!=null)returnconn.isClosed();returnfalse;}@OverridepublicbooleanisReadOnly()throwsSQLException{if(conn!=null)returnconn.isReadOnly();returnfalse;}@OverridepublicbooleanisValid(inttimeout)throwsSQLException{if(conn!=null)returnconn.isValid(timeout);returnfalse;}@OverridepublicStringnativeSQL(Stringsql)throwsSQLException{if(conn!=null)returnconn.nativeSQL(sql);returnnull;}@OverridepublicCallableStatementprepareCall(Stringsql)throwsSQLException{if(conn!=null)returnconn.prepareCall(sql);returnnull;}@OverridepublicCallableStatementprepareCall(Stringsql,intresultSetType,intresultSetConcurrency)throwsSQLException{if(conn!=null)returnconn.prepareCall(sql,resultSetType,resultSetConcurrency);returnnull;}@OverridepublicCallableStatementprepareCall(Stringsql,intresultSetType,intresultSetConcurrency,intresultSetHoldability)throwsSQLException{if(conn!=null)returnconn.prepareCall(sql,resultSetType,resultSetConcurrency,resultSetHoldability);returnnull;}@OverridepublicPreparedStatementprepareStatement(Stringsql)throwsSQLException{if(conn!=null)returnconn.prepareStatement(sql);returnnull;}@OverridepublicPreparedStatementprepareStatement(Stringsql,intautoGeneratedKeys)throwsSQL

1 / 24
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功