JDBC 连接的 Java 空指针异常
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/9792104/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Java Null Pointer Exception for JDBC Connection
提问by Shahab
I am trying to run a web application that gets a specific length of numbers from a user and checks that against a database (so if the user made a typo, it will makes suggestions as to what key the user actually meant). The problem I am running into is the application won't connect to the database, I get this error:
我正在尝试运行一个 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)
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)
在 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)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at 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.StandardHostokeValve.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章)
在 org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:579)
在 org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1805)
在 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)
Line 410 in Validator.Validate is:
Validator.Validate 中的第 410 行是:
Statement stmt = Conn.createStatement();
Where Conn is a java.sql.Connection variable
其中 Conn 是一个 java.sql.Connection 变量
Line 203 is a call to the method that does the ^ statement
第 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)
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) )
在 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)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org. 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)
在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章)
This is the error I get on my server, if I run it on my local machine it works just fine (it validates the ID). What could be the problem here? Cannot it not locate the com.mysql.jdbc.Driver class? Is that class the issue?
这是我在服务器上遇到的错误,如果我在本地机器上运行它,它工作得很好(它验证 ID)。这里可能有什么问题?它不能定位 com.mysql.jdbc.Driver 类吗?那个班有问题吗?
Thanks for the advice/help in advance!
提前感谢您的建议/帮助!
NOTE:
笔记:
The Validator class is an external jar that is in my class path. It calls on another jar in its class path the contains the com.mysql.jdbc classes, as you can see in the following pictures
Validator 类是一个位于我的类路径中的外部 jar。它调用包含 com.mysql.jdbc 类的类路径中的另一个 jar,如下图所示
The BugValidator jar contains the mysql-connector jar which has the Drivers class
BugValidator jar 包含具有 Drivers 类的 mysql-connector jar
采纳答案by Jon
From this:
由此:
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
It's pretty clear that you don't have the MySQL driver on your ClassPath. Somewhere in your project, you should have the jar that contains the MySQL driver. If you don't, then you either need to download it to your lib directory, or set up a Maven dependency to it, depending on how your projects dependencies are being handled.
很明显,您的 ClassPath 上没有 MySQL 驱动程序。在您的项目中,您应该有包含 MySQL 驱动程序的 jar。如果不这样做,那么您要么需要将其下载到您的 lib 目录中,要么需要为其设置 Maven 依赖项,具体取决于您的项目依赖项的处理方式。
EDIT: In response to your update. All your screenshot shows is that everything is set up fine for compilation within your IDE. But we still don't know whereyou are running your application from that's giving you this stack trace.
编辑:响应您的更新。您的所有屏幕截图都表明,一切都设置为可以在您的 IDE 中进行编译。但是我们仍然不知道您在哪里运行您的应用程序,这为您提供了此堆栈跟踪。
Are you running your app from inside your IDE and getting the stack trace from the console? Are you running it after it's been packaged and seeing the stack trace in some logs?
您是从 IDE 内部运行应用程序并从控制台获取堆栈跟踪吗?您是否在打包后运行它并在某些日志中看到堆栈跟踪?
回答by SimonSez
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
You'll have to include the MySQL JDBC-Driverin your servers classpath.
Either by publishing it with your application or putting it in your servers lib
directory.
您必须在服务器类路径中包含MySQL JDBC-Driver。
通过将其与您的应用程序一起发布或将其放在您的服务器lib
目录中。
Hope this helpes, have Fun!
希望这有帮助,玩得开心!
回答by Nullpo
Did you load the driver class??
你加载驱动类了吗?
Class.forName("com.mysql.jdbc.Driver");
i.e.:
IE:
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=?";
Extracted from: http://forums.mysql.com/read.php?60,42473,275468#msg-275468
摘自:http: //forums.mysql.com/read.php?60,42473,275468#msg-275468
回答by BalusC
The JDBC driver needs to go in the webapp's runtime classpath, not in some arbitrary /lib
folder, let alone embedded in a different JAR file (that would also not work in normal Java applications by the way).
JDBC 驱动程序需要进入 web 应用程序的运行时类路径,而不是任意/lib
文件夹中,更不用说嵌入到不同的 JAR 文件中(顺便说一下,这也不适用于普通的 Java 应用程序)。
Put the libraries which the webapp requires during runtime individually in webapp's /WEB-INF/lib
folder.
将 webapp 在运行时需要的库单独放在 webapp 的/WEB-INF/lib
文件夹中。
Unrelatedto the concrete problem, please use package names according Java naming conventions.
与具体问题无关,请按照Java命名约定使用包名。