有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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类,如下图所示

Libraries currently in my netbeans project


BugValidator jar包含mysql连接器jar,它具有驱动程序类

Contents of the BugValidator jar


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


共 (4) 个答案

  1. # 1 楼答案

    JDBC驱动程序需要放在webapp的运行时类路径中,而不是放在任意的/lib文件夹中,更不用说嵌入到不同的JAR文件中(顺便说一句,这在普通Java应用程序中也不起作用)

    将webapp在运行时需要的库分别放在webapp的/WEB-INF/lib文件夹中


    与具体问题无关请根据Java naming conventions使用包名

  2. # 2 楼答案

    java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

    您必须在服务器的类路径中包含MySQL JDBC驱动程序
    通过将其与应用程序一起发布或将其放入服务器的lib目录

    希望这有帮助。玩得开心

  3. # 3 楼答案

    您是否加载了驱动程序类

    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

  4. # 4 楼答案

    由此:

    java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
    

    很明显,您的类路径上没有MySQL驱动程序。在项目的某个地方,您应该有一个包含MySQL驱动程序的jar。如果没有,则需要将其下载到lib目录,或者设置对其的Maven依赖项,具体取决于项目依赖项的处理方式

    编辑:响应您的更新。所有的屏幕截图显示,在IDE中编译的一切都设置得很好。但是我们仍然不知道您运行应用程序的位置,这将为您提供堆栈跟踪

    您是否从IDE内部运行应用程序,并从控制台获取堆栈跟踪?您是否在打包后运行它,并在一些日志中看到堆栈跟踪