zoukankan      html  css  js  c++  java
  • 关于数据库连接池使用代理报 java.lang.ClassCastException

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

     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 {
                        }
    
                    });

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

  • 相关阅读:
    linux shell 总结
    python小结
    python与execl的读写
    利用burpsuits暴力破解登陆界面
    python之函数的使用
    Sublime text怎么识别input函数
    ping的禁止
    Hbase的配置与使用
    JAVA 利用反射自定义数据层框架
    JAVA实现网页上传头像
  • 原文地址:https://www.cnblogs.com/mydomainlistentome/p/4857505.html
Copyright © 2011-2022 走看看