如何在 Eclipse Web 项目中安装 JDBC 驱动程序而不面对 java.lang.ClassNotFoundexception

Posted

技术标签:

【中文标题】如何在 Eclipse Web 项目中安装 JDBC 驱动程序而不面对 java.lang.ClassNotFoundexception【英文标题】:How to install JDBC driver in Eclipse web project without facing java.lang.ClassNotFoundexception 【发布时间】:2011-01-22 03:03:47 【问题描述】:

There is a VERY similar question 属于我的,但就我而言,我的构建路径中没有任何重复的 jar,因此该解决方案对我不起作用。我已经在谷歌搜索了几个小时,但我在那里找到的解决方案都没有真正解决我的问题。我正在为作业创建一个具有一些数据库连接的网站。我正在使用 mysql 数据库,在 Eclipse 中开发并在 Windows 上运行。

我不断收到java.lang.ClassNotFoundException: com.mysql.jdbc.Driver 的以下代码:

import java.sql.*;
//...
public void someMethodInMyServlet(PrintWriter out)

    Connection connection = null;
    PreparedStatement query = null;
    try 

        out.println("Create the driver instance.<br>");
        Class.forName("com.mysql.jdbc.Driver").newInstance();

        out.println("Get the connection.<br>");
        connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "secret");
        query = connection.prepareStatement( "SELECT * FROM customers");

        //...
     catch (Exception e)
    
        out.println(e.toString()+"<br>");
    

//...

当我运行上面的代码时,我得到以下输出:

Create the driver instance.
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

它没有超过Class.forName... 行,我不知道为什么!这是我所做的:

    下载mysql-connector。 把它放在我的MySQL文件夹C:\Program Files\MySQL\mysql-connector-java-5.1.12\mysql-connector-java-5.1.12-bin.jar。 在 Eclipse 中打开了项目属性。 将外部 Jar 添加到我的构建路径,我选择了mysql-connector-java-5.1.12-bin.jar

每当我尝试使用 servlet 时,我都会遇到相同的错误,无论我是否有 jar 或没有。你能帮我解决这个问题吗?

【问题讨论】:

在命令行上使用非 servlet 测试程序会发生什么? java -cp C:\Program Files\MySQL\mysql-connector-java-5.1.12-bin.jar;... @trashgod 我刚刚做了一个空主类的虚拟测试项目:..\Test\src&gt;java -cp "C:\Program Files\MySQL\mysql-con nector-java-5.1.12\mysql-connector-java-5.1.12-bin.jar"; Main.java Exception in thread "main" java.lang.NoClassDefFoundError: Main/java 【参考方案1】:

对于每个将由 web 应用程序使用的 JAR 文件风格的“第 3 方”库,只需将物理 JAR 文件复制/拖放到 web 应用程序的 /WEB-INF/lib 中即可。然后它将在 webapp 的默认类路径中可用。此外,Eclipse 足够聪明,可以注意到这一点。无需为构建路径而烦恼。但是,请确保删除您之前添加的所有不必要的引用,否则可能会发生冲突。

另一种方法是通过将物理 JAR 文件放到服务器自己的 /lib 文件夹中来将其安装在服务器本身中。当您使用服务器提供的 JDBC 连接池数据源时,这是必需的,而后者又需要 MySQL JDBC 驱动程序。

另见:

How to add JAR libraries to WAR project without facing java.lang.ClassNotFoundException? Classpath vs Build Path vs /WEB-INF/lib How should I connect to JDBC database / datasource in a servlet based application? Where do I have to place the JDBC driver for Tomcat's connection pool? JDBC CLASSPATH Not Working

【讨论】:

谢谢。我有同样的问题,你的解决方案有效。但是在 webapp 的 '/WEB-INF/lib' 中添加 JAR 文件和在 buildpath 中添加相同的 JAR 文件有什么区别?如果每个 3rd 方库都应该添加到 '/WEB-INF/lib' 中,那么为什么 buildpath 有添加外部 JAR 文件的选项? @Hiral:项目的 Build Path 中的该部分用于编译时类路径。要使 JAR 也最终出现在运行时类路径中,请将其添加到项目的 Deployment Assembly 列表中。请注意,当构建/导出 WAR 时,这最终会以 /WEB-INF/lib 中的 JAR 形式结束。那么为什么不把它放在首位呢? 非常感谢..我不明白为什么相同的代码在 java 应用程序中工作,但在 servlet 中却没有..你的答案很好:) 对于 Eclipse 的任何其他新用户,您可以通过转到 Properties > 'Deployment Assembly' > 'Add...' > 'Java Build Path Entries' 并选择将 jar 添加到项目的部署程序集中你的罐子。 :)【参考方案2】:

由于您在servlet 中运行它,您需要让servlet 容器 可以访问该jar。您可以将连接器作为应用程序war 的一部分包含在内,或者将其作为servlet 容器的扩展库和数据源管理内容的一部分(如果有的话)。第二部分完全取决于您拥有的容器。

【讨论】:

我正在通过 Eclipse 运行 Tomcat 服务器...您能否根据这些信息更具体一些?我必须把罐子放在哪里? 将 mysql-connector-java-5.1.6-bin.jar 放到 \Apache Tomcat 6.0.18\lib 文件夹中【参考方案3】:

其他人关于使驱动程序 JAR 可用于您的 servlet 容器是正确的。我的评论是为了建议您从命令行验证驱动程序本身是否完好。

不要空的main(),试试这样的东西,改编自包含的文档:

public class LoadDriver 
    public static void main(String[] args) throws Exception 
        Class.forName("com.mysql.jdbc.Driver");
    

在我的平台上,我会这样做:

$ ls mysql-connector-java-5.1.12-bin.jar mysql-connector-java-5.1.12-bin.jar $ javac LoadDriver.java $ java -cp mysql-connector-java-5.1.12-bin.jar:.负载驱动程序

在您的平台上,您需要使用; 作为路径分隔符,如here 和here 所述。

【讨论】:

【参考方案4】:

将 mysql-connector-java-5.1.6-bin.jar 放到 \Apache Tomcat 6.0.18\lib 文件夹中。您的问题将得到解决。

【讨论】:

仅当 OP 使用容器管理的 DataSource 时,而不是当 OP 手动摆弄 DriverManager 时。对于将 JAR 放在 webapp 的 /WEB-INF/lib 中,就像我的回答一样绰绰有余。 我尝试了所有其他更优雅的方法——但都失败了。蛮力 - 将它放在库中确实 - 有效。谢谢【参考方案5】:

你不应该做的事情(尤其是在处理共享项目时)

好的,在遇到同样的问题并在此处和其他地方阅读了一些答案之后。似乎将external lib 放入WEB-INF/lib 并不是一个好主意,因为它pollute webapp/JRE libs with server-specific libraries - for more information check this answer"

我不推荐的另一个解决方案是:将其复制到 tomcat/lib 文件夹中。虽然这可能有效,但很难管理共享(例如 git)项目的依赖关系。

好的解决方案1

创建vendor 文件夹。把你所有的外部库放在那里。然后,将此文件夹作为依赖项映射到您的项目。在eclipse中你需要

    将您的文件夹添加到 build path
      Project Properties -> Java build path Libraries -> 添加外部库或任何其他解决方案来添加您的文件/文件夹
    将构建路径添加到 deployment Assembly (reference)
      Project Properties -> Deployment Assembly Add -> Java Build Path Entries 您现在应该会在构建路径上看到库列表,您可以指定这些库包含在已完成的 WAR 中。 选择你想要的,然后点击完成。

好的解决方案2

使用maven(或任何替代方法)来管理项目依赖关系

【讨论】:

【参考方案6】:

只需按照以下步骤操作:

1) 安装eclipse 2) 将 Apache 导入 eclipse 3) 安装mysql 4) 下载mysqlconnector/J 5) 解压压缩文件,浏览它,直到你得到 bin 文件。然后将包含 bin 的文件夹中存在的所有文件放到 C:\Program Files\mysql\mysql server5.1/ 然后在eclipse中定义驱动时给出与地址相同的路径。

这一切都很简单。

【讨论】:

【参考方案7】:

如果问题仍然存在,

把- mysql-connector-java-5.0.8-bin jar 放在 Tomcat->lib-> 文件夹中的某个位置(无论您将 Tomcat 安装在哪里)。并更改您的环境变量(通过单击 Mycomputer 的属性 - 高级系统设置 - 环境变量 - 并设置一个新的变量名和变量值作为您的 lib 文件所在的位置。不要忘记在路径末尾输入 ; )

如果问题仍然存在 尝试下载 commons-collections-2.0.jar (http://www.docjar.com/jar_detail/commons-collections-2.0.jar.html) 并将 jar 粘贴到 Tomcat-lib 中 mysql jar 所在的相同位置(即)。

清理您的项目-停止您的服务器-最后尝试运行。

【讨论】:

【参考方案8】:

很多次我都面临这个问题,我遇到过 ClassNotFoundException。 如果 jar 不在物理位置。

所以请确保 .jar 文件(mysql 连接器)在 WEB-INF lib 文件夹的物理位置。和 确保在 cmd 中使用 shutdown 命令重新启动 Tomcat。 它应该工作。

【讨论】:

【参考方案9】:

对我有用的唯一解决方案是将 .jar 文件放在 WEB-INF/lib 下。希望这会有所帮助。

【讨论】:

【参考方案10】:

假设您的项目是基于 maven 的,请将其添加到您的 POM:

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.26</version>
    </dependency>

Save > Build > 并再次测试连接。有用!您实际的 mysql java 连接器版本可能会有所不同。

【讨论】:

【参考方案11】:

将 mysql-connector-java-5.1.38-bin.jar 放到 C:\Program Files\Apache Software Foundation\Tomcat 7.0\lib 文件夹中。通过执行这个程序

【讨论】:

【参考方案12】:

我的问题有点不同。而不是jdbc:oracle:thin:@server:port/service,我将其命名为server:port/service

在 GlobalNamingResources.Resource 的 url 属性中缺少 jdbc:oracle:thin:@。但是我忽略了tomcat异常的

java.sql.SQLException: Cannot create JDBC driver of class 'oracle.jdbc.driver.OracleDriver' for connect URL 'server:port/service'

【讨论】:

【参考方案13】:

对于这个错误:

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

你需要:

Import java.sql.*;
Import com.mysql.jdbc.Driver;

即使它在应用程序运行之前不使用。

【讨论】:

以上是关于如何在 Eclipse Web 项目中安装 JDBC 驱动程序而不面对 java.lang.ClassNotFoundexception的主要内容,如果未能解决你的问题,请参考以下文章

如何在myeclipse中安装tomcat和部署项目到tomcat中

Pythonwindows下Eclipse中安装集成webpy框架

怎么在eclipse中安装properties插件

在eclipse中安装SVN插件失败

如何在eclipse中安装Java EE插件?请各位大侠帮忙解答。还有就是JavaEE插件在哪里可以下载

如何在 Eclipse Indigo IDE 中安装 Drools 插件