将 Connection 类型转换为 OracleConnection 与 connection.unwrap(OracleConnection.class) 有何不同
How is typecasting Connection to OracleConnection different from connection.unwrap(OracleConnection.class)
将 java.sql.Connection 类型转换为 OracleConnection 与从 java.sql.Connection unwrap 方法获取 OracleConnection 有何不同。
此外,如果我通过 connection.unwrap(OracleConnection.class) 创建 OracleConnection,那么我应该在 finally 中关闭 OracleConnection 还是在 finally java.sql.Connection 中关闭 OracleConnection。
差异有些微妙但有意义。
如果实际实现对象与声明的 class 不兼容,类型转换将失败并返回 ClassCastException
。 IE。如果实现不是 OracleConnection
并且您尝试对其进行类型转换,您将得到异常。
使用 unwrap(Class clazz)
将尝试查找指定类型的对象,并且 return 将尝试查找指定类型的对象,如果不可能,则使用 SQLException
失败。使用 Wrapper
接口方法的好处是您可以使用 isWrapperFor
方法提前检查 unwrap
是否会成功。
将 java.sql.Connection 类型转换为 OracleConnection 与从 java.sql.Connection unwrap 方法获取 OracleConnection 有何不同。
此外,如果我通过 connection.unwrap(OracleConnection.class) 创建 OracleConnection,那么我应该在 finally 中关闭 OracleConnection 还是在 finally java.sql.Connection 中关闭 OracleConnection。
差异有些微妙但有意义。
如果实际实现对象与声明的 class 不兼容,类型转换将失败并返回 ClassCastException
。 IE。如果实现不是 OracleConnection
并且您尝试对其进行类型转换,您将得到异常。
使用 unwrap(Class clazz)
将尝试查找指定类型的对象,并且 return 将尝试查找指定类型的对象,如果不可能,则使用 SQLException
失败。使用 Wrapper
接口方法的好处是您可以使用 isWrapperFor
方法提前检查 unwrap
是否会成功。