如何清除缓存的结构描述符并在创建结构时再次加载它

问题描述 投票:0回答:1

现在使用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 weblogic12c ojdbc
1个回答
0
投票

您可以调用以下命令从缓存中删除描述符。

((oracle.jdbc.internal.OracleConnection)conn).removeDescriptor(“SQL_type_name”);

© www.soinside.com 2019 - 2024. All rights reserved.