24

有一个与我非常相似的问题,但就我而言,我的构建路径中没有任何重复的 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...,我不知道为什么!这是我所做的:

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

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

4

13 回答 13

56

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

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

也可以看看:

于 2010-03-01T00:06:11.380 回答
4

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

于 2010-02-28T23:41:53.007 回答
3

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

于 2010-12-29T12:16:39.830 回答
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:. 负载驱动程序

在您的平台上,您需要;用作路径分隔符,如此处和此处所讨论

于 2010-03-01T01:02:23.203 回答
2

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

好的,在遇到同样的问题并在这里和其他地方阅读了一些答案之后。似乎投入external lib并不是WEB-INF/lib一个好主意pollute webapp/JRE libs with server-specific libraries- 有关更多信息,请查看此答案“

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

好的解决方案1

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

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

好的解决方案2

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

于 2015-02-16T08:15:16.640 回答
1

只需按照以下步骤操作:

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

伙计们,这一切都很容易。

于 2012-03-10T10:21:35.620 回答
0

如果问题仍然存在,

将 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 粘贴到 mysql jar 所在的相同位置 (即)在Tomcat-lib中。

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

于 2012-05-07T04:33:56.793 回答
0

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

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

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

于 2013-10-04T19:33:46.640 回答
0

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

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

于 2012-10-30T03:49:27.157 回答
0

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

于 2012-11-13T12:47:41.600 回答
0

我的问题有点不同。而不是jdbc:oracle:thin:@server:port/service我把它当作server:port/service.

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

java.sql.SQLException: Cannot create JDBC driver of class 'oracle.jdbc.driver.OracleDriver' for connect URL 'server:port/service'
于 2019-01-09T20:02:56.410 回答
0

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

于 2016-03-15T07:32:14.857 回答
-2

对于这个错误:

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

你需要:

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

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

于 2013-03-20T16:30:43.373 回答