2013-12-23 3 views
0

Я пытаюсь получить данные из базы данных с помощью JSP, но при запуске на сервере я получаю следующую ошибку. Может ли кто-нибудь сказать мне, что случилось, и показать мне, как это исправить?Java EE, JDBC и Tomcat

type Rapport d''exception 

message java.lang.NullPointerException 

description Le serveur a rencontré une erreur interne qui l''a empêché de satisfaire la requête. 

exception 

org.apache.jasper.JasperException: java.lang.NullPointerException 
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:549) 
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:470) 
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390) 
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) 
cause mère 

java.lang.NullPointerException 
    org.apache.jsp.vrf_jsp._jspService(vrf_jsp.java:84) 
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432) 
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390) 
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) 
note La trace complète de la cause mère de cette erreur est disponible dans les fichiers journaux de Apache Tomcat/7.0.47. 

вот мой код:

package utilitaire; 

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.SQLException; 

public class Database 
{ 

    public Connection con; 

    public Connection createConnection() 
    { 
     try 
     { 
      Class.forName("com.mysql.jdbc.driver"); 
      this.con = DriverManager.getConnection("jdbc:mysql://localhost:3306/scoop_phase2p2","root",""); 
     }catch(ClassNotFoundException e){ 
      System.out.println("driver introuvable"); 
     }catch(SQLException e){ 
      e.getErrorCode(); 
     } 
     return this.con; 
    } 



} 

/* ** * ** * ** * ** * ** * ** * ** * * * * ** * ** * ** * ** */

<%@ page language = "java" %> 
<%@ page import = "utilitaire.Admin" %> 
<%@ page import = "utilitaire.Database" %> 
<%@ page import = "java.sql.SQLException" %> 
<%@ page import = "java.sql.ResultSet" %> 
<%@ page import = "java.sql.PreparedStatement" %> 
<%@ page import = "java.sql.Connection" %> 

<% 
    String login = request.getParameter("login"); 
    String mdp = request.getParameter("mdp"); 

    Database db = new Database(); 
    Connection conn = db.createConnection(); 
    try 
    { 
     PreparedStatement query = conn.prepareStatement("SELECT * FROM admin WHERE login= ? AND DECODE(mdp, 'key')=?"); 
     query.setString(1, login); 
     query.setString(2, mdp); 
     ResultSet rs = query.executeQuery(); 
     for(int i=0; rs.next(); i++) 
     if(i!=0) 
      out.print("yup"); 
     else 
      out.print("nope"); 
    }catch(SQLException e){ 
     e.getCause(); 
    } 

%> 
+0

NullPointerException происходит, когда вы пытаетесь использовать метод невагоризованного объекта. Когда у меня возникает эта проблема, я вставляю некоторые if (! = Null) {} else {} в использование каждого объекта для просмотра источника проблемы. При первом представлении вы не создаете соединение в JSP, beacause conn равно null – alepuzio

ответ

1

Прежде всего:

Class.forName("com.mysql.jdbc.driver"); 

Здесь водитель должен быть водитель. Имена классов Java чувствительны к регистру. По этой причине ваш код выдает исключение ClassNotFoundException:

} catch(ClassNotFoundException e){ 
     System.out.println("driver introuvable"); 
    }catch(SQLException e){ 
     e.getErrorCode(); 
    } 
    return this.con; 

Здесь есть несколько проблем. Прежде всего, независимо от того, что происходит, вы возвращаете «con». Даже если он все еще равен нулю. Обработчик SQLException действительно ничего не делает. По крайней мере, вы должны войти в стек.

Database db = new Database(); 
Connection conn = db.createConnection(); 
try 
{ 
    PreparedStatement query = conn.prepareStatement("SELECT * FROM admin WHERE login= ? AND DECODE(mdp, 'key')=?"); 

Что, вероятно, происходит здесь: conn остается недействительным, и вы его не проверяете. Затем вы пытаетесь вызвать prepareStatement по нулевой ссылке и получить исключение NullPointerException.

Закрепить «драйвер -> Driver» вопрос и вместо возврата пустых и глотания исключения, повторно выдать его, так что вы получите шанс увидеть, что проблема:

try 
    { 
     Class.forName("com.mysql.jdbc.Driver"); 
     this.con = DriverManager.getConnection("jdbc:mysql://localhost:3306/scoop_phase2p2","root",""); 
     return this.con; 
    }catch(ClassNotFoundException e){ 
     throw new IllegalStateException(e); 
    }catch(SQLException e){ 
     throw new IllegalStateException(e); 
    } 
+0

Я изменил драйвер на Driver, но все же я получаю ошибку с нулевым указателем, это похоже на то, что моя программа не может найти соединитель mysql, который я предоставил , я использую mysql-connector-java5.1.18.bin.jar. я включил его следующим образом: щелкните правой кнопкой мыши мой путь prject-- build - настройте путь сборки - библиотеки - добавьте внешнюю банку. я сделал что-то не так?? – user3129924

Смежные вопросы