现在使用oracle 12c oracle.sql.StructDescriptor类已弃用。现在,您可以直接创建结构并将其绑定到语句,如下所示。
PreparedStatement ps= conn.prepareStatement("text_of_prepared_statement");
Struct mySTRUCT = conn.createStruct (...);
ps.setObject(1, mySTRUCT, Types.STRUCT);
问题是如果我们更改与此结构相关联的基础oracle记录类型的属性结构(例如:添加新属性,删除属性,更改属性的顺序),则在JDBC中缓存的结构描述符将变为陈旧。因此执行将以SQLException结束。这也在oracle文档here中提到过。
我需要的是一种重新加载结构描述符的方法,如果它已经过时而不使用不推荐的oracle.sql.StructDescriptor类或重置连接池。
到目前为止我发现:我们可以使用Weblogic DataSource属性“删除已启用的连接”来丢弃物理连接,如here所述。
配置:Weblogic 12c ojdbc7 jdk 1.8
您可以调用以下命令从缓存中删除描述符。
((oracle.jdbc.internal.OracleConnection)conn).removeDescriptor(“SQL_type_name”);