2013-10-26 105 views
0

我试图通过我的下面的java代码连接到Oracle 11g数据库,在使用Tomcat 4服务器的Web应用程序中。 ojdbc6.jar在Eclipse构建路径中,但是在下面得到Error。无法通过瘦连接Oracle 11g

但是当我在一个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) 
+2

你能编辑你的问题并提供你的Java代码吗?否则,我们将无法帮助您。我发现你已经在你的数据库URL中加入了'DB schema name',你在那里放什么?它应该是数据库SID,而不是模式名称。 –

+0

您是否拥有Eclipse构建路径中的所有Oracle JAR,或突出其中一个? ojdbc6.jar是正确的使用 - 你有没有尝试删除其他两个,只使用那一个? TTC7Protocol的东西似乎是特定于ojdbc14.jar(所以说[findjar](http://www.findjar.com/class/oracle/jdbc/ttc7/TTC7Protocol.html)),它不在ojdbc5的副本中.jar和ojdbc6.jar,我有。 –

+0

我更新了一些更多的信息。请看看它。 @PrzemyslawKruglej:我已经提供了2行Java代码,只是想用加载驱动程序连接数据库。是的,那是DB SID名称。 Luke:我的Eclipse构建路径中只有ojdbc6.jar。但仍然遇到这个问题。代码工作在一个独立的Java文件中,只有ojdbc6.jar在路径中,但在Web应用程序中,还有其他Jars(Spring,Apache commons jars等)以及ojdbc6.jar。可能是一些其他的瓶子造成这个问题?请指教。 – user2922076

回答

2

由于您的独立程序运行正常,这意味着您的程序运行时类路径没问题。但是对于Tomcat 4来说,它的失败会引发对tomcat类路径的怀疑。我的猜测是,由于你的tomcat很老,它可能包含旧的驱动程序类(可能是classes12.jar或更早版本的tomcat库中的ojdbc jar文件(特别是查看$ CATALINA_HOME/common/lib)。是这样的话删除除从你的classpath ojbdc6所有其他罐子还要确保您的Web应用程序库不包含classes12.jar以上ojdbc罐子

你也可以尝试使用-verbose:。类你的tomcat jvm启动时会打印加载类的信息,但是这会在日志文件中输出很多信息。搜索驱动程序类,它会告诉你它是从哪里加载的。

Loaded oracle.jdbc.driver.OracleDriver from file: xxx.jar 
+0

太棒了,从tomcat路径中删除了ojdbc14.jar,并添加了ojdbc6.jar,它工作。谢谢,Shailendra。 – user2922076

+0

乐意帮忙!如果有帮助,请接受答案:-)) – Shailendra