Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法通过精简连接连接Oracle 11g_Java_Jdbc_Oracle11g - Fatal编程技术网

Java 无法通过精简连接连接Oracle 11g

Java 无法通过精简连接连接Oracle 11g,java,jdbc,oracle11g,Java,Jdbc,Oracle11g,我正试图通过下面的java代码在一个使用Tomcat4服务器的web应用程序中连接到Oracle11gdb。Eclipse构建路径中的ojdbc6.jar,但出现以下错误 但是当我在一个Java文件(publicstaticvoidmain())中尝试这段相同的Java代码,并在Eclipse构建路径中使用ojdbc6.jar时,它能够连接到DB,非常奇怪!! 那么为什么同样的代码在我的web应用程序中不起作用呢 服务器:Tomacat 4 JDK版本:JDK 1.6 Java代码: Class

我正试图通过下面的java代码在一个使用Tomcat4服务器的web应用程序中连接到Oracle11gdb。Eclipse构建路径中的ojdbc6.jar,但出现以下错误

但是当我在一个Java文件(publicstaticvoidmain())中尝试这段相同的Java代码,并在Eclipse构建路径中使用ojdbc6.jar时,它能够连接到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)
在下面获取此信息时出错:

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)
java.lang.ArrayIndexOutOfBoundsException:7
位于oracle.security.o3logon.C0.r(C0)
在oracle.security.o3logon.C0.l(C0)上
位于oracle.security.o3logon.C1.c(C1)
位于oracle.security.o3logon.O3LoginClientHelper.getEPasswd(O3LoginClientHelper)
在oracle.jdbc.ttc7.O3log.(O3log.java:289)
位于oracle.jdbc.ttc7.TTC7Protocol.logon(TTC7Protocol.java:251)
位于oracle.jdbc.driver.OracleConnection(OracleConnection.java:246)
位于oracle.jdbc.driver.OracleDriver.getConnectionInstance(OracleDriver.java:365)
位于oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:260)
位于java.sql.DriverManager.getConnection(DriverManager.java:582)
位于java.sql.DriverManager.getConnection(DriverManager.java:185)

由于您的独立程序运行正常,这意味着您的程序运行时类路径正常。然而,对于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

您可以编辑您的问题并提供您的Java代码吗?否则我们将无法帮助您。我看到您已将
DB schema name
放在数据库URL中-您放在那里的是什么?它应该是数据库SID,而不是架构名称。您是否在Eclipse构建路径中有所有这些Oracle jar,或者jut其中一个?ojdbc6.jar是正确使用其中一个-您是否尝试过删除另外两个并仅使用其中一个?TTC7Protocol内容似乎是特定于ojdbc14.jar的(这么说),而且我没有ojdbc5.jar和ojdbc6.jar的副本。我用更多的信息更新了这个问题。请看一下。@PrzemyslawKruglej:我已经提供了两行Java代码,只是想用加载驱动程序连接数据库。是的,这是数据库SID名称。Luke:我的Eclipse构建路径中只有ojdbc6.jar。但仍然存在这个问题。代码在独立的Java文件上运行,路径中只有ojdbc6.jar,但在web应用程序中,还有其他jar,如spring、Apache commons jar等与ojdbc6.jar一起。可能是其他jar导致了此问题?请提供建议。太棒了,从tomcat路径中删除了ojdbc14.jar,并添加了ojdbc6.jar,它成功了。非常感谢Shailendra。