国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

自己寫的一個未成熟的數據庫連接池(二)

2019-11-18 12:04:12
字體:
來源:轉載
供稿:網友

  /**
   * Statement的自封裝,屏蔽了getResultSet,executeQuery,getGeneratedKeys方法 返回自己的接管類
   * 目的適記錄SQl的動作和設置相應連接最后活動時間。
   * @author Liudong
   */
  
  package com.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==nullinterfaces.length==0){
          interfaces = new Class[1];
          interfaces[0] = 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 com.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==nullinterfaces.length==0){
          interfaces = new Class[1];
          interfaces[0] = 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 com.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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 荥经县| 玛沁县| 新平| 陆良县| 宝兴县| 岳池县| 洪江市| 绥芬河市| 德惠市| 景谷| 绥滨县| 红原县| 鄯善县| 平阴县| 瓮安县| 涞源县| 松滋市| 望谟县| 油尖旺区| 进贤县| 佛坪县| 屯门区| 武山县| 连江县| 滨州市| 华蓥市| 龙陵县| 龙川县| 南漳县| 合川市| 惠东县| 广昌县| 依兰县| 延庆县| 高要市| 牙克石市| 繁昌县| 乌海市| 武冈市| 潢川县| 沿河|