2017-01-13 9 views
-1

Мы сталкиваемся с непредсказуемой ошибкой, заявляя, что «отсутствует параметр« in »или« out »в индексе: 7» для вызова процедуры с использованием оператора Callable в Java. При каждом вызове процедуры мы не закрываем соединение. Это проблема?Не закрытое соединение оракула на сервере портала IBM Websphere

Примечание: реализация кода не является прямым кодом, который вызывает процедуру. У нас есть внутренняя структура, которая заботится о вызове БД, поэтому его сложно опубликовать полный код.

+0

действительно принимайте ответ, если вы чувствуете его полезным – MozenRath

ответ

0

Если вы сами не создаете соединение, вам не нужно закрывать соединение. Однако вам нужно закрыть CallableStatement.

Кроме того, отсутствующий параметр или параметр является указанием на то, что для этой процедуры требуется больше параметров, связанных с ней, по сравнению с числом или параметрами, указанными в вызываемом заявлении.

Если это не так, вы можете получить его, потому что вы не привязываете параметр в инструкции.

Пример:

call MY_PROC(?,?)

вам нужно связать 2 параметра в Java коде для него. Но поскольку вы говорите, что это происходит не всегда, возможно, одна из ваших привязок к параметрам находится в состоянии if, которое не выполняется при возникновении ошибки.

+0

Число параметров, переданных и принятых из процедуры, равно. – Hareesh

+0

Его исключение не исключение все время – Hareesh

+0

вы можете проверить http://stackoverflow.com/questions/27342697/missing-in-or-out-parameter-at-index-1-error-in-java-oracle – MozenRath

1

Отсутствие фрагмента кода (было бы полезно, если вы можете его опубликовать), мы можем только размышлять о возможных причинах. Одна вещь, указывающая на inout параметры, заключается в том, что вам необходимо установить для них входные значения, statement.setX (n, value) и зарегистрировать их как выходные параметры, statement.registerOutParameter (n, type) каждый раз, когда они используются , Обратитесь к этой ссылке с Oracle JDBC документации для более полного примера:

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

Вы также хотите быть в курсе, что источники данных в WebSphere Application Server кэширует CallableStatements по умолчанию (по CallableStatement.close), который включает в себя применение Параметры CallableStatement.clearParameters, которые влияют на очистку значений параметров и освобождение ресурсов, которыми они владеют. Возможно, что он также может очистить регистрацию параметров. Чтобы поэкспериментировать с отключением кэша операторов, настройте statementCacheSize = 0 в источнике данных. В качестве альтернативы, при использовании JDBC 4.0 или выше, отдельный оператор может быть выполнен без кэширования через CallableStatement.setPoolable (false). Чтобы быть ясным, я не рекомендую отключать кэширование операторов как решение, только как эксперимент, который поможет вам сузить дело.

+0

Реализация кода не является прямым кодом, который вызывает процедуру. У нас есть внутренняя структура, которая заботится о вызове БД, поэтому его сложно опубликовать полный код. Но ваш ответ поможет мне в решении этой проблемы. Будет за исключением вашего ответа после его разрешения на основе ваших предложений. – Hareesh