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