DbUtils组件的核心部分已经解析完了,实际上呢,DbUtils组件还有其它很多有用对JDBC的包装类,所以呢,在这篇博文里一一介绍:
1)DbUtils :JDBC辅助方法的集合类,它里面的方法全部是静态,实际上就是一针对JDBC的辅助操作集合类。该类的实现也是比较的简单的,比如JDBC驱动程序加载、JDBC各类接口连接的关闭等等。现在我抽取部分具有代表性的代码来进行解析:
/**
* 关于数据连接实例Connection,如果Connection为空则不做任何操作
* @param conn 待关闭的Connection.
* @throws SQLException 数据库访问异常
*/
public static void close(Connection conn) throws SQLException {
if (conn != null) {
conn.close();
}
}
/**
* 关于数据连接实例Connection,隐藏任何抛出的SQLException。
* 如果Connection为空则不做任何操作
* @param conn 待关闭的Connection.
*/
public static void closeQuietly(Connection conn) {
try {
close(conn);
} catch (SQLException e) {
// quiet
}
}
/**
* 加载注册数据驱动类.
* 如果加载成功,则会返回true,否则返回false.
*
* @param driverClassName 加载的驱动类名
* @return boolean 如果驱动程序加载成功返回true,否则返回false.
*/
public static boolean loadDriver(String driverClassName) {
try {
Class.forName(driverClassName).newInstance();
return true;
} catch (ClassNotFoundException e) {
return false;
} catch (IllegalAccessException e) {
// Constructor is private, OK for DriverManager contract
return true;
} catch (InstantiationException e) {
return false;
} catch (Throwable e) {
return false;
}
}
看,传说中的关闭数据连接Connection,隐藏异常就是吞异常不捕获噢,哈哈哈~OK,DbUtils这个JDBC帮助类的解析到此为止。
2)ProxyFactory :创建JDBC接口的代理实现类。这个类避免了JDBC2和JDBC3接口之间的不兼容。记住,只是针对JDBC中的接口创建的代理哟。
/**
* 创建一个新的Connection代理对象。
* @param handler 调用拦截/重载类的处理器
* @return 代理的ResultSet实例
*/
public ResultSet createResultSet(InvocationHandler handler) {
return newProxyInstance(ResultSet.class, handler);
}
/**
* 使用处理类的加载器产生一个独立接口的代理类的便利方法
* @param <T> 需要代理的对象类型
* @param type 代理的对象类型
* @param handler 拦截/重写方法调用的处理程序
* @return proxied object
*/
public <T> T newProxyInstance(Class<T> type, InvocationHandler handler) {
return type.cast(Proxy.newProxyInstance(handler.getClass().getClassLoader(), new Class<?>[] {type}, handler));
}
这个类的关键了,就是newProxyInstance方法了,它有两个参数,第二个参数是InvocationHandler的实现类,它是指定代理对象类型的处理方式,首先调用Proxy.newProxyInstance()生成代理类,然后再调用Class类的cast()方法转换成代理类。由此实现不难看出,只针对JDBC的接口实现代理。