2013-10-26 107 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