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...
行,我无法弄清楚原因!这是我做的:
C:\Program Files\MySQL\mysql-connector-java-5.1.12\mysql-connector-java-5.1.12-bin.jar
。 mysql-connector-java-5.1.12-bin.jar
。每当我尝试使用servlet时,我都会得到相同的错误,无论我在那里是否有罐子,或者如果我没有。你能帮我搞清楚吗?
答案 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)项目的依赖性。
创建vendor
文件夹。把你所有的外部库放在那里。然后,将此文件夹映射为项目的依赖项。在日食中你需要
build path
Project Properties
- &gt; Java build path
Libraries
- &gt;添加外部lib或任何其他解决方案来添加文件/文件夹deployment Assembly
(reference)
Project Properties
- &gt; Deployment Assembly
Add
- &gt; Java Build Path Entries
使用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运行之前它还没有使用过。