即使在构建路径中使用 ojdbc14.jar,Class.forName("oracle.jdbc.driver.OracleDriver") 也会得到 ClassNotFound

Posted

技术标签:

【中文标题】即使在构建路径中使用 ojdbc14.jar,Class.forName("oracle.jdbc.driver.OracleDriver") 也会得到 ClassNotFoundException【英文标题】:even with ojdbc14.jar in Build Path, Class.forName("oracle.jdbc.driver.OracleDriver") gets ClassNotFoundException 【发布时间】:2013-09-30 01:02:29 【问题描述】:

我正在尝试使用 java 和 oracle10g 制作一个 servlets 应用程序,到目前为止我已经做得很好,直到我需要一些数据库中的一些特定值,因为我有一个 DAO 类来处理用于检索数据的连接.我有以下问题。

首先,我在此类中执行main() 方法,该方法用于检索某个表中的所有条目并在控制台中打印每个条目的名称。我工作得很好。

然后我想返回所有这些名称的 ArrayList 以便在 servlet 中使用它们。所以我创建了一个方法,就像main() 中的方法一样,唯一的区别是我没有打印名称,而是将每个名称添加到一个 ArrayList 中,该 ArrayList 在关闭连接后返回。好吧,它在Class.forName("oracle.jdbc.driver.OracleDriver") 行中得到ClassNotFoundException

如果有帮助,我会在 this 教程的指导下将 Java 应用程序连接到 Oracle 数据库。

任何帮助将不胜感激

【问题讨论】:

你如何确保 jdbc jar 在你的类路径中? 在eclipse中项目的属性,在Java Build Path选项,在Libraries选项卡中,它显示“ojdbc14.jar - /lib” 查看战争内容。 好吧...战争没有任何罐子。我如何把它们也放在那里? 【参考方案1】:

ojdbc14.jar 放入您的war 文件中的WEB-INF/lib/ 目录。您可以使用 ANT task 来执行此操作。如果您不熟悉 ANT,您可以将 jar 文件复制到项目下的 WEB-INF/lib/ 目录中,然后使用 Windows 资源管理器或 WinZip 或其他任何适合您的方式对其进行压缩。然后将 .zip 文件重命名为 .war 并部署到 Tomcat 服务器上。

如果您想快速修复,只需将 ojdbc jar 文件复制到 tomcat 下的server/lib 目录并重新启动 tomcat。它应该可以工作。

编辑:参考下面的评论。虽然我个人没有看到 web-app 类加载器中的 JDBC 驱动程序有任何意外行为,但是,建议将驱动程序 jar 保存在 Server lib 下。

【讨论】:

永远不要将数据库驱动程序放在 webapp 类加载器中!仅在服务器类加载器中。 @Michael 为什么不呢?如果您有不同的版本要支持不同的 web 应用程序,那么您将需要放入单独的 web 应用程序。你能解释更多吗? 这已在 Tomcat 用户邮件列表中讨论过多次,但原因之一是 DriverManager 不知道类加载器层次结构,您最终可能会出现未定义的行为。请搜索邮件列表。

以上是关于即使在构建路径中使用 ojdbc14.jar,Class.forName("oracle.jdbc.driver.OracleDriver") 也会得到 ClassNotFound的主要内容,如果未能解决你的问题,请参考以下文章

关于oracle的JDBC驱动ojdbc14.jar

解压出来的ojdbc14文件放java哪里?

ojdbc14_g.jar与ojdbc14.jar区别

ojdbc6.jar;打开 zip 文件时出错

roracle11g中有nls_charset12.jar吗有的话在哪里? 我的jdk是1.7, 我选的jdbc包是ojdbc6.jar还是ojdbc14

oracle连接数据库的jar包