码迷,mamicode.com
首页 > 数据库 > 详细

关于数据库连接池使用代理报 java.lang.ClassCastException

时间:2015-10-06 19:31:26      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:

用到动态代理时会发生这样的错误:

 java.lang.ClassCastException: $Proxy0 cannot be cast to java.sql.Connection

原因是数据库驱动版本的问题;

当用到:

mysql-connector-java-5.0.8-bin.jar

则不会出报错;

但是,当用到:

mysql-connector-java-5.1.7-bin.jar (5.1以上)

则会报 java.lang.ClassCastException: $Proxy0 cannot be cast to java.sql.Connection;

 

Connection proxy = (Connection) Proxy.newProxyInstance(conn.getClass().getClassLoader(), conn.getClass().getInterfaces()
            , new InvocationHandler(){

                public Object invoke(Object proxy, Method method,
                        Object[] args) throws Throwable {
                }
            
        });

 在两个不同版本  打印出的结果不同

 Class[] interfaces = conn.getClass().getInterfaces();
  System.out.println(interfaces.length);
        for (Class c : interfaces) {
            System.out.println(c.getCanonicalName());
        }

  高版本的通过  conn.getClass().getInterfaces() 获得为 null

 将代码改为:

Connection proxy = (Connection) Proxy.newProxyInstance(conn.getClass()
                .getClassLoader(), new Class[]{Connection.class},
                new InvocationHandler() {

                    public Object invoke(Object proxy, Method method,
                            Object[] args) throws Throwable {
                    }

                });

 这样就可以获得所实现的接口。

关于数据库连接池使用代理报 java.lang.ClassCastException

标签:

原文地址:http://www.cnblogs.com/mydomainlistentome/p/4857505.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!