Java IBM Websphere portal server中的非关闭oracle连接

Java IBM Websphere portal server中的非关闭oracle连接,java,oracle,websphere-7,websphere-portal,Java,Oracle,Websphere 7,Websphere Portal,我们面临着一个不可预测的错误,即在Java中使用Callable语句的过程调用“在索引:7处缺少in或out参数”。 在每次过程调用中,我们都不会关闭连接。这就是问题所在吗 注意:代码实现不是调用过程的直接代码。我们有负责DB调用的内部框架,因此很难发布完整的代码。除非您自己创建连接,否则不需要关闭连接。但是,您确实需要关闭CallableStatement 此外,缺少in或out参数表明,与callable语句中指定的一个或多个参数相比,过程需要更多绑定到它的参数 如果上述情况不是这样,那么您

我们面临着一个不可预测的错误,即在Java中使用Callable语句的过程调用“在索引:7处缺少in或out参数”。 在每次过程调用中,我们都不会关闭连接。这就是问题所在吗


注意:代码实现不是调用过程的直接代码。我们有负责DB调用的内部框架,因此很难发布完整的代码。

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

此外,缺少in或out参数表明,与callable语句中指定的一个或多个参数相比,过程需要更多绑定到它的参数

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

例如:

调用我的程序(?)

您需要在java代码中为它绑定2个参数。但正如您所说的,这种情况并不总是发生,可能您的一个参数绑定处于
if
状态,当错误发生时,该条件不满足。

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


您还需要了解WebSphereApplicationServer数据源在默认情况下缓存CallableStatement(在CallableStatement.close时),这涉及调用CallableStatement.clearParameters,其作用是清除参数值并释放它们所持有的资源。它还可能清除out参数的注册。要尝试禁用语句缓存,请在数据源上配置statementCacheSize=0。或者,如果使用JDBC4.0或更高版本,则可以通过CallableStatement.setPoolable(false)使单个语句不可缓存。明确地说,我不建议禁用语句缓存作为解决方案,仅作为一个实验,以帮助您缩小原因。

如果您觉得答案有用,请接受答案。从过程中传递和接受的参数数量相等。它不会一直引发异常。您可能希望检查是否存在缺少参数的问题。我们在调试模式下检查,所需的参数正在执行过程代码实现不是直接代码,它调用过程。我们有负责DB调用的内部框架,所以很难发布完整的代码。但你的回答将有助于我解决实施问题。一旦根据您的建议解决了问题,您的答案将被删除。