JDBC连接的Java空指针异常

时间:2012-03-20 17:40:04

标签: java sql jdbc connection

我正在尝试运行一个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类,如下图所示

Libraries currently in my netbeans project


BugValidator jar包含mysql-connector jar,其中包含Drivers类

Contents of the BugValidator jar


Contents of mysql-connector-java-5.1.7-bin.jar

4 个答案:

答案 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使用包名。