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

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

  • 相关阅读:
    java资料
    tomcat内存配置
    mybatis深入理解(一)之 # 与 $ 区别以及 sql 预编译
    Sturts2的国际化处理
    web.xml中如何设置配置文件的加载路径
    varchar和varchar2的区别
    IDEA 常见文件类型的图标介绍
    IDEA文件编码修改
    Debug 介绍
    IntelliJ IDEA 显示行号方法
  • 原文地址:https://www.cnblogs.com/mydomainlistentome/p/4857505.html
Copyright © 2011-2022 走看看