Исключение нулевого указателя Java для соединения JDBC - PullRequest
1 голос
/ 20 марта 2012

Я пытаюсь запустить веб-приложение, которое получает определенную длину чисел от пользователя и проверяет ее по базе данных (поэтому, если пользователь сделал опечатку, он предложит, какой ключ на самом деле имел в виду пользователь).Проблема, с которой я сталкиваюсь, состоит в том, что приложение не подключается к базе данных, я получаю эту ошибку:


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.jpg: 247)
в javax.servlet.http.HttpServlet.service (HttpServlet.java:641)
в javax.servlet.http.HttpServlet.service (HttpServlet.java:722)
в org.ache.catalina.core..invoke (StandardWrapperValve.java:224)
в org.apache.catalina.core.StandardContextValve.invoke (StandardContextValve.java:169)
в org.apache.catalina.authenticator.AuthenticatorBase.invokeatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke (StandardHostValve.java:168)
в org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java)
в org.apache.catalina.valves.AccessLogValve.invoke (AccessLogValve.java:927) в org.apache.catalina.core.StandardEngineValve.invoke (StandardEngineValve.java:118)
в org.ap..connector.CoyoteAdapter.service (CoyoteAdapter.java:407)
в org.apache.coyote.http11.AbstractHttp11Processor.process (AbstractHttp11Processor.java:987)
в org.apache.coyote.Abю(AbstractProtocol.java:579)
в org.apache.tomcat.util.net.AprEndpoint $ SocketProcessor.run (AprEndpoint.java:1805)
в java.util.concurrent.ThreadPoolExecutor $ Worker.runTask (ThreadPoolExec.java: 886)
в java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:908)
в java.lang.Thread.run (Thread.java:662)


Линия410 в Validator.Validate:

Statement stmt = Conn.createStatement();

Где Conn - это переменная java.sql.Connection

Строка 203 - это вызов метода, который выполняет оператор ^


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)
в java.lang.Class.forName0 (собственный метод)
в 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 (HttpServ:)
at 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.jpg)
at org.apache.catalina.core.StandardContextValve.invoke (StandardContextValve.java:169)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke (AuthenticatorBase.java:472)
.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)
at 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)
at java.lang.Thread.run (Thread.java:662)


Это ошибка, которую я получаю на своем сервере, если я запускаю ее на локальном компьютере, она работает просто отлично (проверяет идентификатор). В чем может быть проблема здесь? Не может ли он не найти класс com.mysql.jdbc.Driver? Это проблема класса?

Спасибо за совет / помощь заранее!

Примечание:

Класс Validator - это внешний jar, который находится в моем пути к классам. Он вызывает другой jar в своем пути к классам, который содержит классы com.mysql.jdbc, как вы можете видеть на следующих рисунках

Libraries currently in my netbeans project


В банку BugValidator входит баночка mysql-разъема, которая имеет класс Drivers

Contents of the BugValidator jar


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

Ответы [ 4 ]

5 голосов
/ 20 марта 2012

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

Вы должны будете включить MySQL JDBC-драйвер в путь к классу серверов.
Либо опубликовав его вместе с приложением, либо поместив в каталог серверов lib.

Надеюсь, это поможет, получайте удовольствие!

2 голосов
/ 20 марта 2012

Из этого:

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

Совершенно очевидно, что у вас нет драйвера MySQL на вашем ClassPath. Где-то в вашем проекте у вас должен быть jar, содержащий драйвер MySQL. Если вы этого не сделаете, то вам нужно либо загрузить его в каталог lib, либо установить для него зависимость Maven, в зависимости от того, как обрабатываются зависимости ваших проектов.

РЕДАКТИРОВАТЬ: в ответ на ваше обновление. Все ваши скриншоты показывают, что все настроено для компиляции в вашей IDE. Но мы до сих пор не знаем , где вы запускаете ваше приложение, которое дает вам эту трассировку стека.

Запускаете ли вы свое приложение из среды IDE и получаете трассировку стека с консоли? Вы запускаете его после того, как он был упакован и видите трассировку стека в некоторых журналах?

1 голос
/ 20 марта 2012

Загружали ли вы драйвер класса ??

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

0 голосов
/ 21 марта 2012

Драйвер JDBC должен находиться в пути к классам среды выполнения веб-приложения, а не в какой-либо произвольной папке /lib, не говоря уже о том, что он встроен в другой файл JAR (кстати, он также не будет работать в обычных приложениях Java).

Поместите библиотеки, необходимые веб-приложению, во время выполнения индивидуально в папку /WEB-INF/lib веб-приложения.


Не связано с конкретной проблемой, используйте имена пакетов в соответствии с Javaсоглашения об именах .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...