java 不能加载 mysql 驱动……

2015-07-06 14:55:56 +08:00
 xxgirl2

代码 Class.forName("com.mysql.jdbc.Driver"); 永远都是 ClassNotFoundException

尝试过以下方案,同时尝试过,也分别尝试过:
一、在Build Path里加入mysqlconn.jar
二、在Build Path里加入包含这个jar的目录
三、在Tomcat的lib里复制进这个jar
四、在WEB-INF/lib里复制进这个jar
五、调整、勾选library的顺序
以上方案均无效。

重装3件套无效,以管理员权限运行无效。
总之全部无效。永远都是 not found。

另外,代码 Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test", "root", "toor"); 给出的是 SQLException
尝试过代码 com.mysql.jdbc.Driver driver = new com.mysql.jdbc.Driver(); 给出的也是
SQLException

不加载jdbc的话,其余代码正常,也能正常在浏览器中显示。

这到底是怎么回事,该如何解决?

环境:
Eclipse Java EE - Mars Release (4.5.0) Build 20150621-1200
JDK 7u75
Tomcat 8.0.23
mysql-connector-java-5.1.35-bin.jar
Windows 6.3.9600

5349 次点击
所在节点    Java
24 条回复
xuhaoyangx
2015-07-06 15:08:17 +08:00
private String sqlServerDriver="com.mysql.jdbc.Driver";
private String sqlUrl="jdbc:mysql://localhost/xxx";
private String sqlUser="root";
private String sqlPassword="";
Class.forName(sqlServerDriver);
ct=DriverManager.getConnection(sqlUrl, sqlUser, sqlPassword);
funky
2015-07-06 15:12:44 +08:00
jar加入build path之后去看jar下是不是有这个类不就完了么,
顺便吐槽下楼上的变量命名 sqlServerDriver 不应该是 mysqlDriver么
xxgirl2
2015-07-06 15:20:13 +08:00
@xuhaoyangx 真不是语法问题,这种格式也挂了。

@funky 当然有。那个包都解开看过了。这玩意就在源码的眼皮子底下它也不识别
funky
2015-07-06 15:38:58 +08:00
@xxgirl2 jdbc4.0规范之后不需要显示去加载驱动,方便的话私信我funkyyj#gmail.com
funky
2015-07-06 15:46:07 +08:00
显示==>显式
xxgirl2
2015-07-06 15:56:44 +08:00
@funky DriverManager.registerDriver(new com.mysql.jdbc.Driver()); 中
new com.mysql.jdbc.Driver() 又是一个 SQLException……
直接 getConnection 也是 SQLException
xuhaoyangx
2015-07-06 16:12:20 +08:00
@funky 不要在意细节。。。
Ouyangan
2015-07-06 16:43:57 +08:00
把完整log贴出来
xxgirl2
2015-07-06 17:02:48 +08:00
@Ouyangan


七月 06, 2015 5:01:11 下午 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet [D] in context with path [/w] threw exception [Servlet execution threw an exception] with root cause
java.lang.Error: Unresolved compilation problem:
Unhandled exception type ClassNotFoundException

at D.doGet(D.java:33)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:617)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:668)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1521)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1478)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)
coetzee
2015-07-06 17:11:12 +08:00
@xxgirl2 编译就报错了,看一下jar包的加载顺序吧
SevilinMa
2015-07-06 17:34:46 +08:00
建议你采用JNDI的方式加载JDBC或者使用pool吧
incompatible
2015-07-06 17:58:12 +08:00
有没有试过在build path的Libraries这里加入这个jar包?
xxgirl2
2015-07-06 19:54:56 +08:00
@incompatible 试过,无效。

@SevilinMa new InitialContext() -> NamingException。打死也不认"com.mysql.jdbc.Driver"

@coetzee 还望明示
wintersun
2015-07-06 20:23:42 +08:00
代码发我,调好发回给你,wintersun_ph#qq.com,不谢!
wintersun
2015-07-06 22:47:20 +08:00
楼主的代码我改动后成功运行了,加载驱动无问题!
已经把答案发给楼主了,结贴散分!
broadliyn
2015-07-06 23:53:24 +08:00
我猜是classpath没有设置好
zonghua
2015-07-07 00:08:10 +08:00
你这个是servlet环境都还没有吧
xxgirl2
2015-07-07 01:30:45 +08:00
@wintersun 好吧,纠结了近20个小时的问题被 try-catch 解决了,真的感谢。
于是这玩意为啥需要包一层 try-catch,这东西难道不是只有出问题的时候才访问吗?
刚刚接触 java 实在想不到这一点上,不知哪里有文档可以学习这块。
msg7086
2015-07-07 01:36:33 +08:00
@xxgirl2 Java的世界就是无尽地与编译器做斗争的世界。
wintersun
2015-07-07 07:32:34 +08:00
@xxgirl2
论保险跟try...catch

[两者的共性]
你都不希望意外发生,但它有可能发生(小概率事件),你必须为此做出准备——买保险或是写try...catch

[保险的作用]
当你出现意外、重大疾病时赔付给你,解你燃眉之急的!

[两者的运作]
前提是你得先买保险——代码里针对可能出状况的部分写入try...catch
发生情况时,保险赔付生效,帮助你面对困难,减少你的损失——try...catch代码执行,保证程序不因为异常而崩溃,遇到致命error也能优雅退出

[其他语言]
try-catch者,java有之,c#有之,c++有之(这三家可以说共一个祖宗来的),新出的swift也有之。

[问题的本质]
导入楼主代码到Eclipse,硕大的编译错误伫立在那里——强类型、编译型的Java,Eclipse已经对其进行了各种周到的validation、语法检查,楼主只要跟着Eclipse走就好了;实际上你用命令行编译也会有这个报错!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/203668

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX