JDBC连接的Java空指针异常

JDBC连接的Java空指针异常,java,sql,jdbc,connection,Java,Sql,Jdbc,Connection,我试图运行一个web应用程序,从用户那里获取特定长度的数字,并对照数据库进行检查,这样,如果用户输入了错别字,它将给出关于用户实际含义的建议。我遇到的问题是应用程序无法连接到数据库,我遇到以下错误: java.lang.NullPointerException 在Validator.Validate.checkIDsValidate.java:410 在Validator.Validate.getAllValidIdsValidate.java:203 在Python.WebServlet.pr

我试图运行一个web应用程序,从用户那里获取特定长度的数字,并对照数据库进行检查,这样,如果用户输入了错别字,它将给出关于用户实际含义的建议。我遇到的问题是应用程序无法连接到数据库,我遇到以下错误:

java.lang.NullPointerException 在Validator.Validate.checkIDsValidate.java:410 在Validator.Validate.getAllValidIdsValidate.java:203 在Python.WebServlet.processRequestWebServlet.java:70 位于Python.WebServlet.doPostWebServlet.java:247 位于javax.servlet.http.HttpServlet.serviceHttpServlet.java:641 位于javax.servlet.http.HttpServlet.serviceHttpServlet.java:722 位于org.apache.catalina.core.ApplicationFilterChain.internalDoFilterApplicationFilterChain.java:305 位于org.apache.catalina.core.ApplicationFilterChain.doFilterApplicationFilterChain.java:210 位于org.apache.catalina.core.StandardWrapperValve.invokeStandardWrapperValve.java:224 位于org.apache.catalina.core.StandardContextValve.invokeStandardContextValve.java:169 位于org.apache.catalina.authenticator.AuthenticatorBase.invokeAuthenticatorBase.java:472 位于org.apache.catalina.core.StandardHostValve.invokeStandardHostValve.java:168 位于org.apache.catalina.valves.ErrorReportValve.invokeErrorReportValve.java:98 位于org.apache.catalina.valves.AccessLogValve.invokeAccessLogValve.java:927 位于org.apache.catalina.core.StandardEngineValve.InvokeStandardenginievalve.java:118 位于org.apache.catalina.connector.CoyoteAdapter.serviceCoyoteAdapter.java:407 位于org.apache.coyote.http11.AbstractHttp11Processor.processAbstractHttp11Processor.java:987 位于org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.processAbstractProtocol.java:579 位于org.apache.tomcat.util.net.apredpoint$SocketProcessor.runapredpoint.java:1805 位于java.util.concurrent.ThreadPoolExecutor$Worker.runTaskThreadPoolExecutor.java:886 位于java.util.concurrent.ThreadPoolExecutor$Worker.runThreadPoolExecutor.java:908 java:662

验证程序中的第410行。验证为:

Statement stmt = Conn.createStatement();
其中Conn是一个java.sql.Connection变量

第203行是对执行^语句的方法的调用

java.lang.ClassNotFoundException:com.mysql.jdbc.Driver 位于org.apache.catalina.loader.WebappClassLoader.loadClassWebappClassLoader.java:1701 位于org.apache.catalina.loader.WebappClassLoader.loadClassWebappClassLoader.java:1546 位于java.lang.Class.ForName0的本机方法 java:169 位于Validator.Validate.dbConnectValidate.java:394 在Validator.Validate.getAllValidIdsValidate.java:193 在Python.WebServlet.processRequestWebServlet.java:70 位于Python.WebServlet.doPostWebServlet.java:247 位于javax.servlet.http.HttpServlet.serviceHttpServlet.java:641 位于javax.servlet.http.HttpServlet.serviceHttpServlet.java:722 位于org.apache.catalina.core.ApplicationFilterChain.internalDoFilterApplicationFilterChain.java:305 位于org.apache.catalina.core.ApplicationFilterChain.doFilterApplicationFilterChain.java:210 位于org.apache.catalina.core.StandardWrapperValve.invokeStandardWrapperValve.java:224 位于org.apache.catalina.core.StandardContextValve.invokeStandardContextValve.java:169 位于org.apache.catalina.authenticator.AuthenticatorBase.invokeAuthenticatorBase.java:472 位于org.apache.catalina.core.StandardHostValve.invokeStandardHostValve.java:168 位于org.apache.catalina.valves.ErrorReportValve.invokeErrorReportValve.java:98 位于org.apache.catalina.valves.AccessLogValve.invokeAccessLogValve.java:927 位于org.apache.catalina.core.StandardEngineValve.InvokeStandardenginievalve.java:118 位于org.apache.catalina.connector.CoyoteAdapter.serviceCoyoteAdapter.java:407 位于org.apache.coyote.http11.AbstractHttp11Processor.processAbstractHttp11Processor.java:987 位于org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.processAbstractProtocol.java:579 位于org.apache.tomcat.util.net.apredpoint$SocketProcessor.runapredpoint.java:1805 位于java.util.concurrent.ThreadPoolExecutor$Worker.runTaskThreadPoolExecutor.java:886 位于java.util.concurrent.ThreadPoolExecutor$Worker.runThreadPoolExecutor.java:908 java:662

这是我在服务器上遇到的错误,如果我在本地机器上运行它,它会正常工作,它会验证ID。这里会出现什么问题?它不能定位com.mysql.jdbc.Driver类吗?那门课是问题所在吗

提前感谢您的建议/帮助

注: 验证器类是我的类路径中的一个外部jar。它在类路径中调用另一个jar,其中包含com.mysql.jdbc类,如下图所示

BugValidator jar包含mysql连接器jar 哪一个有Drivers类

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

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

希望这有帮助。玩得开心

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

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

希望这有帮助。玩得开心

由此:

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

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

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

由此:

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

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


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

您是否加载了驱动程序类

Class.forName("com.mysql.jdbc.Driver"); 
i、 e:


摘自:

是否加载了驱动程序类

Class.forName("com.mysql.jdbc.Driver"); 
i、 e:


摘自:

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

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


与具体问题无关,请使用相应的包名。

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

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


与具体问题无关,请根据使用包名。

您的类路径中是否包含mySQL JDBC驱动程序?validator类是一个外部jar,它包含另一个jar,该jar在com.mySQL.JDBC文件夹中包含mySQL JDBC驱动程序类。嵌套的jar文件不包括在您的类路径中。因此,如果包含BugValidator.jar,则其中的jar将不在类路径中。确保在服务器上JDBC驱动程序jar显式位于类路径中,BugValidator包含一个名为.classpath的文件,其中包含以下内容:,这是一个显式声明吗?您需要提取mysql-connector-java-5.1.7-bin.jar并将其放在BugValidator.jar旁边的lib目录中。您是否在类路径中包含mysql JDBC驱动程序?validator类是一个外部jar,它包含另一个在com.mysql.JDBC folderNested中包含mysql JDBC驱动程序类的jarjar文件不包括在类路径中。因此,如果包含BugValidator.jar,则其中的jar将不在类路径中。确保在服务器上JDBC驱动程序jar显式位于类路径中BugValidator包含一个名为.classpath的文件,并在其中包含以下内容:,这是一个显式声明吗?您需要提取mysql-connector-java-5.1.7-bin.jar并将其放在BugValidator.jar旁边的lib目录中在IDE中运行时不会出现错误,只有当我将它打包成war并从apache服务器发送它时。。。。我不知道它是否存在,但我检查了Bug Validator类,它包含:,这足够了吗?这表明您的.war打包过程有问题。您确定包含驱动程序的.jar包含在您部署的.war中吗?你把.war解压到一个临时目录中去看它包含什么了吗?啊,我想我知道你现在做错了什么。读一下:-你试图在一个罐子中包含一个罐子,在一场战争中,对吗?假设我猜对了-t
除非使用自定义类加载器,否则hat将无法工作。您的BugValidator jar文件可以包含对MySQL驱动程序jar的类路径引用,但它也不能包装它——它必须引用外部MySQL驱动程序jar文件。看来我们发现了你的问题。打包war时,需要将MySQL驱动程序jar文件直接包含在war中,而不是BugValidator jar文件中。当我在IDE中运行它时,错误不会出现,只有当我将其打包成war并将其发送到apache服务器时才会出现。。。。我不知道它是否存在,但我检查了Bug Validator类,它包含:,这足够了吗?这表明您的.war打包过程有问题。您确定包含驱动程序的.jar包含在您部署的.war中吗?你把.war解压到一个临时目录中去看它包含什么了吗?啊,我想我知道你现在做错了什么。阅读本文:-您正试图在一个jar中,在一场战争中包含一个jar,对吗?假设我猜对了-除非您使用自定义类加载器,否则这是行不通的。您的BugValidator jar文件可以包含对MySQL驱动程序jar的类路径引用,但它也不能包装它——它必须引用外部MySQL驱动程序jar文件。看来我们发现了你的问题。打包war时,需要将MySQL驱动程序jar文件直接包含在war中,而不是BugValidator jar文件中;这是com.mysql.jdbc.Driver,但感谢您的建议是的,我做了:Class.forNamemysqldriver;这是com.mysql.jdbc.Driver,但是感谢您的建议,如果没有自定义代码,它将无法工作。请参阅:-相关引用是:类路径头指向本地网络上的类或JAR文件,而不是JAR文件中的JAR文件或通过internet协议访问的类。要将JAR文件中的JAR文件中的类加载到类路径中,必须编写自定义代码来加载这些类。例如,如果MyJar.jar包含另一个名为MyUtils.jar的jar文件,则不能使用MyJar.jar清单中的类路径头将MyUtils.jar中的类加载到类路径中。@Jon你完全正确!但如所附图片所示,驱动程序似乎已经在应用程序库directoy中@Shahab您能否验证驱动程序是否已发布到服务器?查看服务器机器上的应用程序文件夹,确保已从根类路径导出驱动程序jar,而不是BugValidator.jar中的驱动程序jar。干杯是的,将其导出到应用程序文件夹似乎已经起作用了@Jon,从JAR中的一个JAR更改它似乎已经成功了,没有自定义代码就无法工作。请参阅:-相关引用是:类路径头指向本地网络上的类或JAR文件,而不是JAR文件中的JAR文件或通过internet协议访问的类。要将JAR文件中的JAR文件中的类加载到类路径中,必须编写自定义代码来加载这些类。例如,如果MyJar.jar包含另一个名为MyUtils.jar的jar文件,则不能使用MyJar.jar清单中的类路径头将MyUtils.jar中的类加载到类路径中。@Jon你完全正确!但如所附图片所示,驱动程序似乎已经在应用程序库directoy中@Shahab您能否验证驱动程序是否已发布到服务器?查看服务器机器上的应用程序文件夹,确保已从根类路径导出驱动程序jar,而不是BugValidator.jar中的驱动程序jar。干杯是的,将其导出到应用程序文件夹似乎已经起作用了@乔恩,把它从一个罐子里换成一个罐子似乎奏效了