知识大全 自己写的一个未成熟的数据库连接池(二)

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数据库连接池配置

Tomcat5.5数据库连接池配置  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!猫咪正不断把自己B

知识大全 tomcat连接池的配置与使用数据库mysql

    关于tomcat连接池的配置我在自己开始的时候碰到过许多的问题至少失败过六次今天终于成功了对于这个问题的产生与由来我也给大伙说说  

知识大全 spring连接池配置详解

  数据库连接池概述  数据库连接是一种关键的有限的昂贵的资源这一点在多用户的网页应用程序中体现得尤为突出对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性影响到程序的性能指标数据库连接池正是

知识大全 c3po数据库连接池中取出连接

   <!使用连接池获得连接JNDI javanamedriinterfacejava命名目录接口>    

知识大全 Oracle数据库 关于连接池一

Oracle数据库关于连接池一  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  到目前为目JDBC

知识大全 Oracle数据库 关于连接池二

Oracle数据库关于连接池二  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  *大连接数为止在返

知识大全 jboss配置 mysql数据库连接池

jboss配置 mysql数据库连接池实例 :配置:   JDK    JBoss  &n

知识大全 数据库连接池Data Connection Framework

数据库连接池DataConnectionFramework  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一

知识大全 Tomcat 的数据库连接池设置与应用

Tomcat的数据库连接池设置与应用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!.将数据库驱动程

知识大全 Tomcat下配置MySQL数据库连接池

Tomcat下配置MySQL数据库连接池  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在$CA