2017-01-13 4 views
-1

Wir sehen uns einem unvorhersehbaren Fehler gegenüber, der besagt, dass 'in-out-Parameter bei Index: 7' für einen Prozeduraufruf mit der Callable-Anweisung in Java fehlt. Bei jedem Prozeduraufruf schließen wir die Verbindung nicht. Ist das das Problem?Nicht geschlossene Oracle-Verbindung im IBM Websphere-Portalserver

Hinweis: Code-Implementierung ist kein direkter Code, der Prozedur aufruft. Wir haben ein internes Framework, das sich um den DB-Aufruf kümmert. Daher ist es schwierig, vollständigen Code zu posten.

+0

Akzeptieren Sie die Antwort, wenn Sie sich nützlich fühlen – MozenRath

Antwort

0

Wenn Sie nicht selbst eine Verbindung erstellen, müssen Sie die Verbindung nicht trennen. Sie müssen jedoch die CallableStatement schließen.

Der fehlende In- oder Out-Parameter ist ein Hinweis darauf, dass die Prozedur im Vergleich zu der Anzahl oder den Parametern, die in der aufrufbaren Anweisung angegeben sind, mehr Parameter erfordert.

Wenn dies nicht der Fall ist, erhalten Sie es möglicherweise, weil Sie keinen Parameter in der Anweisung binden.

Beispiel:

call MY_PROC(?,?)

Sie benötigen dafür zwei Parameter in Java-Code zu binden. Aber wie Sie sagen, dass es nicht immer passiert, ist vielleicht eine Ihrer Parameterbindung in einer if Bedingung, die nicht erfüllt ist, wenn der Fehler auftritt.

+0

Die Anzahl der übergebenen und von der Prozedur akzeptierten Parameter ist gleich. – Hareesh

+0

Es wirft keine Ausnahme die ganze Zeit – Hareesh

+0

Sie möchten vielleicht http://stackoverflow.com/questions/27342697/missing-in-oder-out-parameter-at-index-1-error-in-java-oracle überprüfen – MozenRath

1

Da Ihnen ein Code-Snippet fehlt (es wäre hilfreich, wenn Sie es veröffentlichen könnten), können wir nur über mögliche Ursachen spekulieren. Eine Sache, auf die Sie bei Inout-Parametern hinweisen sollten, ist, dass Sie beide Eingabewerte für sie festlegen müssen, nämlich statement.setX (n, value) und registrieren Sie sie bei jeder Verwendung als Ausgabeparameter, statement.registerOutParameter (n, type) . Siehe diesen Link von Oracle JDBC-Dokumentation für ein vollständigeres Beispiel:

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

Sie werden auch die WebSphere Application Server-Datenquellen cachen Callablestatements standardmäßig (auf CallableStatement.close) bewusst sein wollen, die den Aufruf beinhaltet der CallableStatement.clearParameters, der die Parameterwerte löscht und die von ihnen gehaltenen Ressourcen freigibt. Es ist möglich, dass es auch die Registrierung von Out-Parametern löscht. Um mit dem Deaktivieren des Anweisungscaches zu experimentieren, konfigurieren Sie statementCacheSize = 0 für die Datenquelle. Wenn JDBC 4.0 oder höher verwendet wird, kann alternativ eine einzelne Anweisung über CallableStatement.setPoolable (false) nicht cachefähig gemacht werden. Um es klar zu sagen, ich empfehle die Deaktivierung des Statement-Caching nicht als Lösung, sondern als ein Experiment, das Ihnen hilft, die Ursache einzugrenzen.

+0

Code-Implementierung ist kein direkter Code, der Prozedur aufruft. Wir haben ein internes Framework, das sich um den DB-Aufruf kümmert. Daher ist es schwierig, vollständigen Code zu posten. Aber Ihre Antwort würde mir helfen, die Implementierung zu lösen. Wird Ihre Antwort außer Kraft setzen, sobald sie aufgrund Ihrer Vorschläge gelöst wurde. – Hareesh

Verwandte Themen