我正在尝试运行一个Web应用程序,该应用程序从用户获取特定长度的数字并对数据库进行检查(因此,如果用户输入了拼写错误,它将提供关于用户实际意味着什么密钥的建议)。我遇到的问题是应用程序无法连接到数据库,我收到此错误:
显示java.lang.NullPointerException
在Validator.Validate.checkIDs(Validate.java:410)
在Validator.Validate.getAllValidIds(Validate.java:203)
在Python.WebServlet.processRequest(WebServlet.java:70)
在Python.WebServlet.doPost(WebServlet.java:247)
在javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
在javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
在org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
在org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
在org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
在org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
在org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
在org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927) 在org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
在org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
在org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987)
在org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.java:579)
在org.apache.tomcat.util.net.AprEndpoint $ SocketProcessor.run(AprEndpoint.java:1805)
at java.util.concurrent.ThreadPoolExecutor $ Worker.runTask(ThreadPoolExecutor.java:886)
在java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:908)
在java.lang.Thread.run(Thread.java:662)
Validator.Validate中的第410行是:
Statement stmt = Conn.createStatement();
其中Conn是java.sql.Connection变量
第203行是对执行^ statement
的方法的调用java.lang.ClassNotFoundException:com.mysql.jdbc.Driver
在org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1701)
在org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1546)
at java.lang.Class.forName0(Native Method)
在java.lang.Class.forName(Class.java:169)
在Validator.Validate.dbConnect(Validate.java:394)
在Validator.Validate.getAllValidIds(Validate.java:193)
在Python.WebServlet.processRequest(WebServlet.java:70)
在Python.WebServlet.doPost(WebServlet.java:247)
在javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
在javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
在org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
在org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
在org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
在org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
在org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
在org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
在org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
在org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
在org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987)
在org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.java:579)
在org.apache.tomcat.util.net.AprEndpoint $ SocketProcessor.run(AprEndpoint.java:1805)
at java.util.concurrent.ThreadPoolExecutor $ Worker.runTask(ThreadPoolExecutor.java:886)
在java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:908)
在java.lang.Thread.run(Thread.java:662)
这是我在服务器上遇到的错误,如果我在本地计算机上运行它就可以正常运行(它会验证ID)。这可能是什么问题?难道不能找到com.mysql.jdbc.Driver类吗?该课程是问题吗?
提前感谢您的建议/帮助!
Validator类是我的类路径中的外部jar。它调用其类路径中的另一个jar包含com.mysql.jdbc类,如下图所示
BugValidator jar包含mysql-connector jar,其中包含Drivers类
答案 0 :(得分:5)
java.lang.ClassNotFoundException:com.mysql.jdbc.Driver
您必须在服务器类路径中包含 MySQL JDBC-Driver
通过将其与您的应用程序一起发布或将其放在服务器lib
目录中。
希望有这种帮助,玩得开心!
答案 1 :(得分:2)
由此:
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
很明显,你的ClassPath上没有MySQL驱动程序。在项目的某个地方,您应该拥有包含MySQL驱动程序的jar。如果不这样做,那么您需要将其下载到lib目录,或者设置Maven依赖项,具体取决于项目依赖项的处理方式。
编辑:回复您的更新。您的所有屏幕截图显示,所有内容都可以在IDE中进行编译。但是我们仍然不知道你正在运行应用程序的 where ,它会给你这个堆栈跟踪。
您是从IDE内部运行应用程序并从控制台获取堆栈跟踪吗?您是否在打包并在某些日志中查看堆栈跟踪后运行它?
答案 2 :(得分:1)
你加载了驱动程序类吗?
Class.forName("com.mysql.jdbc.Driver");
即:
Class.forName("com.mysql.jdbc.Driver");
con=DriverManager.getConnection("jdbc:mysql://localhost:3306/karthicraj","mysql","mysql");
stm=con.createStatement();
String strQry="update sriram set age=?,salary=? where name=? and age=?";
摘自:http://forums.mysql.com/read.php?60,42473,275468#msg-275468
答案 3 :(得分:0)
JDBC驱动程序需要进入webapp的运行时类路径,而不是在某个任意/lib
文件夹中,更不用说嵌入在不同的JAR文件中了(顺便说一下,这也不适用于普通的Java应用程序)。 / p>
将webapp在运行时期间所需的库分别放在webapp的/WEB-INF/lib
文件夹中。
无关,请根据Java naming conventions使用包名。