代码之家  ›  专栏  ›  技术社区  ›  Kiril

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

  •  22
  • Kiril  · 技术社区  · 14 年前

    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 .

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

    13 回复  |  直到 6 年前
        1
  •  52
  •   Community c0D3l0g1c    7 年前

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

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

    参见:

        2
  •  4
  •   DJ.    14 年前

    因为你在运行它 servlet ,您需要通过 servlet容器 . 您可以将连接器作为应用程序的一部分 war 或者把它作为servlet容器的扩展库和数据源管理工具的一部分(如果它有)。第二部分完全取决于您拥有的容器。

        3
  •  3
  •   trashgod    14 年前

    其他的关于使驱动程序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:. LoadDriver
    

    在你的平台上,你需要使用 ; 作为路径分隔符,如前所述 here here .

        4
  •  3
  •   Satya    14 年前

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

        5
  •  1
  •   Erwin Brandstetter    12 年前

    只需遵循以下步骤:

    1)安装Eclipse
    2)将Apache导入Eclipse
    3)安装mysql
    4)下载mysqlconnector/j
    5)解压压缩文件,在其中导航,直到您得到bin文件。然后将包含bin的文件夹中的所有文件放到c:\program files\mysql\mysql server5.1中。/ 然后在Eclipse中定义驱动程序时,给出与地址相同的路径。

    这都很简单。

        6
  •  1
  •   Community c0D3l0g1c    7 年前

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

    好吧,在读了同样的问题,在这里和其他地方读了一些答案之后。似乎是这样 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中,您需要

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

    好解2

    使用 maven (或任何替代方案)以管理项目相关性

        7
  •  0
  •   RAS user3094411    12 年前

    如果问题仍然存在,

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

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

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

        8
  •  0
  •   agiles    12 年前

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

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

        9
  •  0
  •   karthik339    12 年前

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

        10
  •  0
  •   Kingz    11 年前

    假设你的项目是基于Maven的,把它添加到你的POM中:

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

    保存>生成>并再次测试连接。它起作用了!您的实际MySQL Java连接器版本可能会有所不同。

        11
  •  0
  •   Rutvik patel    8 年前

    将MySQL连接器Java5.1.38Bi.jar放到C:\程序文件\ Apache软件基金会\Tomcat 7 \ LIB文件夹中。

        12
  •  0
  •   Anand Rockzz    6 年前

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

    失踪是 jdbc:oracle:thin:@ 在里面 url globalNamingResources.resource中的属性。但我忽略了Tomcat的例外

    java.sql.SQLException: Cannot create JDBC driver of class 'oracle.jdbc.driver.OracleDriver' for connect URL 'server:port/service'
    
        13
  •  -2
  •   Lukas Knuth    11 年前

    对于这个错误:

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

    你需要:

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

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