⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 statements.java

📁 Connection的代理类
💻 JAVA
字号:
package ConnectionDataBase;

import java.sql.*;
import java.lang.reflect.*;

/** 
 * 数据库语句对象实例的代理类 
 * @author qibin 
 */
public class Statements  implements InvocationHandler 
{
	 private Statement statement ; //保存所接管对象的实例 
	 private boolean decode = false; //指定是否进行字符串转码 

	  public Statements(Statement stmt,boolean decode) 
	  { 
		  this.statement = stmt;
		  this.decode = decode;
	  }
	 
	 /**  
	  * 获取一个接管后的对象实例  
	  * @return  
	  */
	 public Statement getStatement() 
	 {
		  Class[] interfaces = statement.getClass().getInterfaces();
		  if(interfaces==null||interfaces.length==0){ 
		   interfaces = new Class[1];
		   interfaces[0] = Statement.class;
	 } 
	  
       Statement stmt = (Statement)Proxy.newProxyInstance(   
	   statement.getClass().getClassLoader(), 
	   interfaces,this);
	  return stmt;
	 
	 }
	 
	 /**  
	  * 方法接管  
	  */
	 public Object invoke(Object proxy, Method m, Object[] args) throws Throwable 
	 {
		 /**
		  * 接管setString方法 
		  */
		  String method = m.getName(); 
		  if(decode && SETSTRING.equals(method)) 
		  {
			   try
			   {
				    String param = (String)args[1];
				    if(param!=null)
				    	param = new String(param.getBytes(),"8859_1");
				    
				    return m.invoke(statement,new Object[]{args[0],param});
			   } 
			   catch(InvocationTargetException e)
			   {
				   throw e.getTargetException();    
			   } 
		  }
	  
		  /**
		  *接管executeQuery方法
		  */
		  if(decode && EXECUTEQUERY.equals(method))
		  {
		   try
		   {
			    ResultSet rs = (ResultSet)m.invoke(statement,args);
			    return new ResultSets(rs,decode).getResultSet();
		   
		   }
		   catch(InvocationTargetException e)
		   {
			   throw e.getTargetException();
		   }  
		  }
		  try
		  {
			  return m.invoke(statement, args);
		  } 
		  catch(InvocationTargetException e) 
		  {
			  throw e.getTargetException();
		  } 
	 }
	 //两个要接管的方法名
	 
	 private final static String SETSTRING = "setString";
	 private final static String EXECUTEQUERY = "executeQuery";

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -