【问题标题】:Non Closed oracle Connection in IBM Websphere portal serverIBM Websphere 门户服务器中的非关闭 oracle 连接
【发布时间】:2017-01-13 10:06:18
【问题描述】:

在 Java 中使用 Callable 语句进行过程调用时,我们正面临无法预测的错误,即“在 index:7 处缺少输入或输出参数”。 在每个过程调用中,我们都不会关闭连接。是这个问题吗?

注意:代码实现不是直接代码,它调用procedure。我们有负责数据库调用的内部框架,所以很难发布完整的代码。

【问题讨论】:

  • 如果您觉得有帮助,请接受答案

标签: java oracle websphere-7 websphere-portal


【解决方案1】:

缺少代码 sn-p(如果您可以发布它会有所帮助)我们只能推测可能的原因。对于 inout 参数要指出的一件事是,您需要为它们设置输入值 statement.setX(n,value) 将它们注册为输出参数 statement.registerOutParameter(n,type)每次使用它们。有关更完整的示例,请参阅 Oracle JDBC 文档中的此链接:

http://docs.oracle.com/javadb/10.10.1.2/ref/rrefjdbc75719.html

您还需要了解默认情况下(在 CallableStatement.close 上)WebSphere Application Server 数据源缓存 CallableStatements,这涉及调用具有清除参数值和释放它们持有的资源的效果的 CallableStatement.clearParameters。它也可能清除输出参数的注册。要尝试禁用语句缓存,请在数据源上配置 statementCacheSize=0。或者,如果使用 JDBC 4.0 或更高版本,则可以通过 CallableStatement.setPoolable(false) 使单个语句不可缓存。需要明确的是,我不建议将禁用语句缓存作为解决方案,仅作为帮助您缩小原因范围的实验。

【讨论】:

  • 代码实现不是直接代码,它调用procedure。我们有负责数据库调用的内部框架,因此很难发布完整的代码。但是您的回答将帮助我解决实施问题。将根据您的建议解决您的答案。
【解决方案2】:

除非您自己创建连接,否则您不需要关闭连接。但是,您确实需要关闭CallableStatement

此外,缺少 in 或 out 参数表明,与可调用语句中指定的数量或参数相比,该过程需要绑定更多参数。

如果不是上述情况,那么您可能会得到它,因为您没有在语句中绑定参数。

例子:

call MY_PROC(?,?)

你需要在java代码中为它绑定2个参数。但正如您所说,它并不总是发生,也许您的参数绑定之一处于错误发生时不满足的if 条件。

【讨论】:

  • 从过程中传递和接受的参数数量相等。
  • 它不会一直抛出异常
  • 那是缺少参数的问题。我们在调试模式下检查,所需的参数正在通过过程
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多