我正在尝试使用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)
答案 0 :(得分: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