标签:
用到动态代理时会发生这样的错误:
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 {
}
});
在两个不同版本 打印出的结果不同
高版本的通过 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