读书人

Commons DbUtils 源码阅览六

发布时间: 2012-12-27 10:17:10 作者: rapoo

Commons DbUtils 源码阅读六

?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的接口实现代理。

?

?

?

?

读书人网 >其他数据库

热点推荐