知识大全 自己写的一个未成熟的数据库连接池(二)
Posted 时间
篇首语:饭可以一日不吃,觉可以一日不睡,书不可以一日不读本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 自己写的一个未成熟的数据库连接池(二)相关的知识,希望对你有一定的参考价值。
/** * Statement的自封装 屏蔽了getResultSet executeQuery getGeneratedKeys方法 返回自己的接管类 * 目的适记录SQl的动作和设置相应连接最后活动时间 * @author Liudong */ package drsl db; import java io *; import java sql *; import java util *; import java util Date; import java lang reflect *; import sun jdbc odbc *; public class StatementObject implements InvocationHandler private Statement stm=null; private Statement stm_proxy=null; private final static String GETRESULTSET_METHOD_NAME = getResultSet ; private final static String EXECUTEQUERY_METHOD_NAME = executeQuery ; private final static String GETGENERATEDKEYS_METHOD_NAME = getGeneratedKeys ; private ResultSetObject rso=null; public StatementObject(Statement stm) this stm=stm; public Statement getStatement() if(stm_proxy==null) ClassLoader classloader=stm getClass() getClassLoader(); Class[] interfaces = stm getClass() getInterfaces(); if(interfaces==null||interfaces length== ) interfaces = new Class[ ]; interfaces[ ] = Statement class; try stm_proxy= (Statement)Proxy newProxyInstance(classloader interfaces this); catch(NullPointerException e) log(e StatementObject getStatement() error ); if(stm_proxy!=null) log( StatementObject getStatement() success ); return stm_proxy; public Object invoke(Object proxy Method m Object[] args) throws Throwable Object obj = null; log( StatementObject invoke:Method: \\ +m getName()+ \\ ); //判断是否调用了getResultSet or executeQuery or getGeneratedKeys //是就截获 if(GETRESULTSET_METHOD_NAME equals(m getName()) || EXECUTEQUERY_METHOD_NAME equals(m getName()) || GETGENERATEDKEYS_METHOD_NAME equals(m getName())) ResultSet rs=(ResultSet)m invoke(stm args); if(rs!=null && rso==null) rso=new ResultSetObject(rs); obj=rso getResultSet(); else if(rso!=null) obj=rso getResultSet(); else log( StatementObject invoke:Method: \\ +m getName()+ \\ 失败 ); else obj = m invoke(stm args); //设置最后一次访问时间 以便及时清除超时的连接 setLastAccessTime( new Date() getTime()); return obj; /** * 将文本信息写入日志文件 */ private void log(String msg) ConnectionManager log(msg); /** * 将文本信息与异常写入日志文件 */ private void log(Throwable e String msg) ConnectionManager log(e msg); //设置最后一次访问时间 private void setLastAccessTime(long ltime) ConnectionObject setLastAccessTime(ltime); ///////////////////////////////////////////////////////////////////////////////// /** * PreparedStatement 的自封装 屏蔽了executeQuery方法 返回自己的接管类 * 目的适记录SQl的动作和设置相应连接最后活动时间 * @author Liudong */ package drsl db; import java io *; import java sql *; import java util *; import java util Date; import java lang reflect *; public class PreparedStatementObject implements InvocationHandler private PreparedStatement ps=null; private PreparedStatement ps_proxy =null; private final static String EXECUTEQUERY_METHOD_NAME = executeQuery ; private ResultSetObject rso=null; PreparedStatementObject(PreparedStatement ps) this ps=ps; public PreparedStatement getPreparedStatement() if(ps_proxy==null) ClassLoader classloader=ps getClass() getClassLoader(); Class[] interfaces = ps getClass() getInterfaces(); if(interfaces==null||interfaces length== ) interfaces = new Class[ ]; interfaces[ ] = PreparedStatement class; try ps_proxy= (PreparedStatement) Proxy newProxyInstance(classloader interfaces this); catch(NullPointerException e) log(e PreparedStatementObject getPreparedStatement() error ); if(ps_proxy!=null) log( PreparedStatementObject getPreparedStatement() success ); return ps_proxy; public Object invoke(Object proxy Method m Object[] args) throws Throwable Object obj = null; log( PreparedStatementObject invoke:Method: \\ +m getName()+ \\ ); //是否调用了executeQuery 如果是 则接管 if(EXECUTEQUERY_METHOD_NAME equals(m getName())) ResultSet rs=(ResultSet)m invoke(ps args); if(rs!=null && rso==null) rso=new ResultSetObject(rs); obj=rso getResultSet(); else if(rso!=null) obj=rso getResultSet(); else log( PreparedStatementObject invoke:Method: \\ +m getName()+ \\ 失败 ); else obj = m invoke(ps args); obj = m invoke(ps args); //设置最后一次访问时间 以便及时清除超时的连接 setLastAccessTime( new Date() getTime()); return obj; /** * 将文本信息写入日志文件 */ private void log(String msg) ConnectionManager log(msg); /** * 将文本信息与异常写入日志文件 */ private void log(Throwable e String msg) ConnectionManager log(e msg); //设置最后一次访问时间 private void setLastAccessTime(long ltime) ConnectionObject setLastAccessTime(ltime); //////////////////////////////////////////////////////////////////////// /** * Statement的自封装 屏蔽了getStatement方法 返回自己的接管类 * 目的适记录SQl的动作和设置相应连接最后活动时间 * @author Liudong */ package drsl db; import java io *; import java sql *; import java util *; import java util Date; import java lang reflect *; public class ResultSetObject implements InvocationHandler private ResultSet rs=null; private ResultSet rs_proxy =null cha138/Article/program/Java/hx/201311/26864相关参考
Tomcat5.5数据库连接池配置 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!猫咪正不断把自己B
关于tomcat连接池的配置我在自己开始的时候碰到过许多的问题至少失败过六次今天终于成功了对于这个问题的产生与由来我也给大伙说说
数据库连接池概述 数据库连接是一种关键的有限的昂贵的资源这一点在多用户的网页应用程序中体现得尤为突出对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性影响到程序的性能指标数据库连接池正是
<!使用连接池获得连接JNDI javanamedriinterfacejava命名目录接口>
Oracle数据库关于连接池一 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 到目前为目JDBC
Oracle数据库关于连接池二 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! *大连接数为止在返
jboss配置 mysql数据库连接池实例 :配置: JDK JBoss &n
知识大全 数据库连接池Data Connection Framework
数据库连接池DataConnectionFramework 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一
Tomcat的数据库连接池设置与应用 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!.将数据库驱动程
Tomcat下配置MySQL数据库连接池 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在$CA