【问题标题】:Unable to connect Oracle 11g via thin无法通过瘦连接 Oracle 11g
【发布时间】:2013-11-05 07:40:50
【问题描述】:

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

但是当我在 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)

【问题讨论】:

  • 您能否编辑您的问题并提供您的 Java 代码?否则我们将无法为您提供帮助。我看到您已将DB schema name 放入您的数据库 URL 中 - 您放在那里的是什么?它应该是数据库 SID,而不是模式名称。
  • 在 Eclipse 构建路径中是否有所有这些 Oracle jar,或者只有其中一个? ojdbc6.jar 是正确的使用 - 您是否尝试删除其他两个并只使用那个? TTC7Protocol 的东西似乎是特定于 ojdbc14.jar(所以说findjar),它不在我拥有的 ojdbc5.jar 和 ojdbc6.jar 的副本中。
  • 我用更多信息更新了问题。请看一下。 @PrzemyslawKruglej:我已经提供了 2 行 Java 代码,只是想将数据库与加载驱动程序连接起来。是的,这就是 DB SID 名称。 Luke:我的 Eclipse 构建路径中只有 ojdbc6.jar。但仍然遇到这个问题。在路径中只有 ojdbc6.jar 的独立 Java 文件上工作的代码,但在 Web 应用程序中,除了 ojdbc6.jar 之外,还有其他 jar(如 spring、Apache commons jar 等)。可能是其他导致问题的罐子?请指教。

标签: java jdbc oracle11g


【解决方案1】:

由于您的独立程序运行正常,这意味着您的程序运行时类路径很好。然而,对于 Tomcat 4,它的失败引起了对 tomcat 类路径的怀疑。我的猜测是,由于您的 tomcat 很旧,它可能包含旧的驱动程序类(可能是 classes12.jar 或更旧的 ojdbc jar 文件在您的 tomcat 的库中(特别是查看 $CATALINA_HOME/common /lib)。如果是这种情况,请从类路径中删除除 ojbdc6 之外的所有其他 jar。还要确保您的 Web 应用程序库不包含 classes12.jar 或更旧的 ojdbc jar。

您也可以尝试在您的 tomcat jvm 启动中使用 -verbose:class 来打印加载类的信息。但是,这将在日志文件中输出大量信息。搜索驱动程序类,它会显示从何处加载。

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

【讨论】:

  • 太棒了,从 tomcat 路径中删除了 ojdbc14.jar 并添加了 ojdbc6.jar 并且它起作用了。非常感谢,Shailendra。
猜你喜欢
  • 1970-01-01
  • 2015-03-12
  • 1970-01-01
  • 2015-02-15
  • 2011-04-04
  • 2014-09-11
  • 1970-01-01
  • 1970-01-01
  • 2011-12-21
相关资源
最近更新 更多