为啥我找不到 Class.forName("com.mysql.jdbc.Driver"); 的异常[复制]

Posted

技术标签:

【中文标题】为啥我找不到 Class.forName("com.mysql.jdbc.Driver"); 的异常[复制]【英文标题】:Why I am getting class not found exception for Class.forName("com.mysql.jdbc.Driver"); [duplicate]为什么我找不到 Class.forName("com.mysql.jdbc.Driver"); 的异常[复制] 【发布时间】:2015-12-12 17:01:07 【问题描述】:

我正在使用:eclipse IDE(Marse)、Java 8、Apache tomcat 8、mysql 开发一个 Web 应用程序。 我的用户注册代码如下:

System.out.println("Connecting....");
            Class.forName("com.mysql.jdbc.Driver");
            System.out.println("Class found....");
            String url="jdbc:mysql://localhost:3306/db";
            String user="root";
            String password="root";
            System.out.println("success");
            Connection conn = DriverManager.getConnection(url,user,password);
            String query = "insert into login (username,password,emailid,country,city) values (?,?,?,?,?)";
            PreparedStatement ps = conn.prepareStatement(query);
            ps.setString(1,b.getUsername());
            ps.setString(2,b.getPassword());
            ps.setString(3,b.getEmailid());
            ps.setString(4,b.getCountry());
            ps.setString(5,b.getCity());
            int count=ps.executeUpdate();
            ps.close();
            conn.close();

我的代码也是正确的,而且我在 Eclipse 中使用 Build path>add_external_jar 选项添加了 mysql-connector-java-5.1.36。但是为什么它给了我这样一个例外?

正在连接.... java.lang.ClassNotFoundException: com.mysql.jdbc.Driver 在 org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1332) 在 org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1166) 在 java.lang.Class.forName0(本机方法) 在 java.lang.Class.forName(未知来源) 在 model.InfoModel.SaveInfo(InfoModel.java:14) 在控制器.Register_user.doGet(Register_user.java:35) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:622) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 在 org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) 在 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142) 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 在 org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518) 在 org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091) 在 org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:673) 在 org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1526) 在 org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1482) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(未知来源) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(未知来源) 在 org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 在 java.lang.Thread.run(Unknown Source)

【问题讨论】:

检查Order and Export标签中你的.jar是否被勾选? 在同一个班级尝试import com.mysql.jdbc.Driver;。如果它有效,那么您的 classForName 应该有效。 我在哪里搜索“订单和导出”选项卡 @FranMontero 我现在导入了它,但它在导入语句下方显示黄色下划线(未使用的导入语句) 【参考方案1】:

右键单击项目,转到Properties。从左侧窗格中选择Deployment Assembly(如果未找到,请阅读更新部分)。检查是否提供了Java Build Path Entries。如果没有,请单击 Add 并包含它。如果它已经存在,请单击 Add 以将您的连接器 jar 包含为 Archive。执行Project>Clean,重启你的服务器。

更新

如果项目没有被分面,您将找不到此选项。可以点击Project Facets,转换为分面结构,添加Dynamic Web Module及相关依赖。

更新

Web 部署程序集问题。 这个答案在大多数情况下很有帮助。

【讨论】:

哦!!!太好了...这解决了我的问题:) 只有 Project->Clean 为我工作

以上是关于为啥我找不到 Class.forName("com.mysql.jdbc.Driver"); 的异常[复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Class.forName() 对我不起作用?

为啥要用invoke方法换句话说就是在啥情况下使用invoke方法?

为啥查询里嵌套查询总是说找不到指定的列啊(JSP)

为啥我找不到 ProgressiveMediaSource?

为啥我找不到 Dockerfile?

XCode - 为啥我找不到文件?