如何在不面向java.lang.ClassNotFoundexception的情况下在Eclipse Web项目中安装JDBC驱动程序

时间:2010-02-28 23:34:36

标签: eclipse java-ee jdbc classnotfoundexception

我需要

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...行,我无法弄清楚原因!这是我做的:

  1. 下载mysql-connector。
  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
  5. 每当我尝试使用servlet时,我都会得到相同的错误,无论我在那里是否有罐子,或者如果我没有。你能帮我搞清楚吗?

13 个答案:

答案 0 :(得分:53)

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

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

另见:

答案 1 :(得分:4)

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

答案 2 :(得分:3)

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

而不是空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:. LoadDriver

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

答案 3 :(得分:3)

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

答案 4 :(得分:1)

请按以下步骤操作:

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

这一切都很容易。

答案 5 :(得分:1)

您不应做的事情(尤其是在共享项目上工作时)

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

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

良好的解决方案1 ​​

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

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

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

答案 6 :(得分:0)

如果问题仍然存在,

把 - mysql-connector-java-5.0.8-bin jar在Tomcat-&gt; lib-&gt;文件夹中的某个位置(无论你在哪里安装了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中。

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

答案 7 :(得分:0)

很多时候我一直面临这个问题,我遇到过ClassNotFoundException。 如果罐子不在物理位置。

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

答案 8 :(得分:0)

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

答案 9 :(得分:0)

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

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

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

答案 10 :(得分:0)

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

答案 11 :(得分:0)

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

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

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

答案 12 :(得分:-2)

发生此错误:

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

你需要:

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

即使在app运行之前它还没有使用过。