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

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

相关参考