问题描述
项目中需要获取oracle数据库中字段的注释,原来代码如下
// 设置Oracle数据库的表注释可读
if (conn instanceof OracleConnection) {
// 设置连接属性,使得可获取到表的REMARK(备注)
((OracleConnection) conn).setRemarksReporting(true);
};
打断点发现conn为 oracle.jdbc.driver.T4CConnection
问题解决
// 设置Oracle数据库的表注释可读
if (conn instanceof OracleConnection) {
// 设置连接属性,使得可获取到表的REMARK(备注)
((OracleConnection) conn).setRemarksReporting(true);
} else {
try {
// T4CConnection不能instanceof OracleConnection
if (conn.isWrapperFor(OracleConnection.class)) {
OracleConnection oracleConnection = conn.unwrap(OracleConnection.class);
oracleConnection.setRemarksReporting(true);
}
} catch (SQLException e) {
log.error("handleRemarks" + e);
}
}
问题原因
连接池通常在真实的连接实例周围有一个包装器,这就是您的强制转换失败的原因。
也可以通过反射进行解决。