📄 statements.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 + -