0

我正在尝试在使用 Tomcat 4 服务器的 Web 应用程序中通过下面的 java 代码连接到 Oracle 11g DB。ojdbc6.jar 在 Eclipse 构建路径中,但在错误之下得到了这个。

但是当我在 Java 文件(public static void main())中尝试这段相同的 Java 代码并在 Eclipse 构建路径中有 ojdbc6.jar 时,它能够连接到 d DB,非常奇怪!那么为什么相同的代码在我的 Web 应用程序中不起作用?

服务器:Tomcat 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 很旧,它可能包含旧的驱动程序类(可能是您的 tomcat 库中的classes12.jar或更旧的 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 回答