0

Tomcat 4 サーバーを使用する Web アプリケーションで、以下の Java コードを介して Oracle 11g DB に接続しようとしています。Eclipse ビルド パスに ojdbc6.jar がありますが、これを取得するとエラーが発生します。

しかし、Java ファイル (public static void main()) でこの同じ Java コードを試し、Eclipse ビルド パスに ojdbc6.jar を入れると、d DB に接続できました。では、なぜこの同じコードが Web アプリケーションで機能しないのでしょうか??

サーバー:Tomacat 4
JDK バージョン:JDK 1.6

Java コード:

Class.forName("oracle.jdbc.OracleDriver");
Connection con = DriverManager.getConnection("jdbc:oracle:thin:@hostName:portNum:SID","user", "pass");

以下のエラーを取得:

java.lang.ArrayIndexOutOfBoundsException: 7
    at oracle.security.o3logon.C0.r(C0)
    at oracle.security.o3logon.C0.l(C0)
    at oracle.security.o3logon.C1.c(C1)
    at oracle.security.o3logon.O3LoginClientHelper.getEPasswd(O3LoginClientHelper)
    at oracle.jdbc.ttc7.O3log.<init>(O3log.java:289)
    at oracle.jdbc.ttc7.TTC7Protocol.logon(TTC7Protocol.java:251)
    at oracle.jdbc.driver.OracleConnection.<init>(OracleConnection.java:246)
    at oracle.jdbc.driver.OracleDriver.getConnectionInstance(OracleDriver.java:365)
    at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:260)
    at java.sql.DriverManager.getConnection(DriverManager.java:582)
    at java.sql.DriverManager.getConnection(DriverManager.java:185)
4

1 に答える 1

2

スタンドアロン プログラムが正しく実行されているため、プログラムのランタイム クラスパスに問題がないことを意味します。ただし、Tomcat 4 の場合、Tomcat クラスパスに疑いが生じます。私の推測では、Tomcat はかなり古いため、古いドライバー クラス ( classes12.jarまたは Tomcat のライブラリ内の古い ojdbc jar ファイル) が含まれている可能性があります (特に $CATALINA_HOME/common/lib を調べてください)。この場合、ojbdc6 を除く他のすべての jar をクラスパスから削除します。また、Web アプリケーション ライブラリに classes12.jar または古い ojdbc jar が含まれていないことを確認してください。

また、Tomcat jvm スタートアップで-verbose:classを使用して、クラスがロードされた場所から情報を出力することもできます。ただし、これにより、ログ ファイルに多くの情報が出力されます。ドライバー クラスを検索すると、これがどこからロードされたかがわかります。

Loaded oracle.jdbc.driver.OracleDriver from file: xxx.jar
于 2013-10-27T05:39:16.277 に答える