2016-12-02 5 views
1

私は、クエリのユーザーとパスワードの単純なJava porjectを実行している間、私はこのエラーメッセージスロー取得:ここerro:java porjectのNullPointerExceptionは、どのように修正するのですか?

type Exception report 

message: java.lang.NullPointerException 

description The server encountered an internal error that prevented it from fulfilling this request. 
java.lang.NullPointerException 
DB.DataBaseConnection.close(DataBaseConnection.java:34) 
DB.UserDAOImpl.queryAll(UserDAOImpl.java:84) 
org.apache.jsp.QueryAll_jsp._jspService(QueryAll_jsp.java:100) 
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:731) 
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:439) 
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395) 
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:731) 

QueryAll.jspです:ここでは

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> 
<%@ page import="DB.*" %> 
<%@ page import="java.util.*" %>  
    <title>QueryAll</title> 
    <% request.setCharacterEncoding("utf-8"); %> 
    <body> 

    <% 
    UserDAO userDAo=DAOFcatory.getUserDAOInstance(); 
    //set new user 
    List<User> all=userDAo.queryAll(); 
    Iterator<User> iter=all.iterator(); 
    %> 
    <table border="1" bgcolor="#c0c0c0" align="center"> 
    <tr> 
     <td>Id</td> 
     <td>Username</td> 
     <td>Password</td> 
    </tr> 
    <% 
    while(iter.hasNext()){ 
    User user1=iter.next(); 
    %> 
    <tr> 
    <td><%=user1.getUserid() %></td> 
    <td><%=user1.getUsername()%></td> 
     <td><%=user1.getPassword() %></td> 
    </tr> 
    <% 
    } 
    %> 
    </table> 

DataBaseConnection.java次のとおりです。

package DB; 

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

public class DataBaseConnection { 
    private final String driver = "com.mysql.jdbc.Driver"; 
    private final String url = "jdbc:mysql:localhost:3306/javaweb"; 
    private final String user = "root"; 
    private final String pwd = "root"; 
    private Connection conn; 

    public DataBaseConnection() { 
     try { 
      Class.forName(driver); 
      this.conn = DriverManager.getConnection(url,user,pwd); 
     } 
     catch (ClassNotFoundException e){ 
      e.printStackTrace(); 
     } 
     catch (SQLException e) { 
      e.printStackTrace(); 
     } 
    } 


    public Connection getConnection() { 
     return this.conn; 
    } 

    public void close(){ 
     try { 
      this.conn.close(); 
     } 
     catch (SQLException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

User.java

ここ

UserDAO.java次のとおりです。ここで

package DB; 

import java.util.*; 

public interface UserDAO { 
    //query by all 
    public List<User> queryAll() throws Exception; 

UserDAOImpl.java次のとおりです。ここで

package DB; 

import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.util.ArrayList; 
import java.util.List; 
import DB.User; 
import DB.DataBaseConnection; 

public class UserDAOImpl implements UserDAO{ 
    public List<User> queryAll() throws Exception { 
     List<User> all = new ArrayList<User>(); 
     String sql = "select * from user"; 
     PreparedStatement pstmt = null; 
     DataBaseConnection dbc = null; 

     try { 
      dbc = new DataBaseConnection(); 
      pstmt = dbc.getConnection().prepareStatement(sql); 

      //query database 
      ResultSet rs = pstmt.executeQuery(); 
      while(rs.next()) { 
       User user = new User(); 
       user.setUserid(rs.getInt(1)); 
       user.setUsername(rs.getString(2)); 
       user.setPassword(rs.getString(3)); 
       //add data to List 
       all.add(user); 
      } 
      rs.close(); 
      pstmt.close(); 
     } 
     catch(Exception e) { 
      e.printStackTrace(); 
      throw new Exception("Erro:operation abnormal"); 

     } 
     finally { 
    dbc.close(); 
     } 
    return all; 
    } 

DAOFactory.javaです:

package DB; 

import DB.*; 
public class DAOFcatory { 

    public static UserDAO getUserDAOInstance() { 
     return new UserDAOImpl(); 
    } 
} 

しかし、私はUserDAOImpl.javaからコードをコメントする場合:

throw new Exception("Erro:operation abnormal");dbc.close();

odd.Iはノー場所を指す参照を使用しようとすると、多分にもそれが発生し、接続するデータベースを、それをないと思うので、私はinformation.It年代トップナビゲーションバーを取得しますが、ありませんあたかもオブジェクトを参照しているかのようにメモリ(null)に格納されます。しかし、私はnullを見つけることができません。ユーザーIDは不確実性、おそらくこれの手掛かりです。

+1

[NullPointerExceptionとは何ですか?それを修正するにはどうすればいいですか?](http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix -it) –

答えて

0

あなたの接続に問題があると思います。

public DataBaseConnection() { 
    try { 
     Class.forName(driver); 
     this.conn = DriverManager.getConnection(url,user,pwd); 
    } 
    catch (ClassNotFoundException e){ 
     e.printStackTrace(); 
    } 
    catch (SQLException e) { 
     e.printStackTrace(); 
    } 
} 

getConnection場合SQLExceptionスロー - それはおそらくやっている - あなたはそれをキャッチしたときに初期化されていないprivate Connection conn;を残します。 this.conn.close();で終了すると、null参照で.close()が呼び出されます。

この段階で(エラーログなどで)印刷されているスタックトレースを表示できる場合は、接続に失敗した理由を確認する必要があります。

次の例では、同一の挙動を示しています終わりにhelloが初期化される前に、例外がスローされているので(hello = "hi";

public class Blah 
{ 
    public String hello; 

    public Blah() 
    { 
     try 
     { 
      fail(); 
      hello = "hi"; 
     } 
     catch (IOException e) 
     { 
      System.err.println("Exception caught!"); 
     } 
    } 

    private void fail() throws IOException 
    { 
     throw new IOException(); 
    } 

    public static void main(String[] args) 
    { 
     Blah blah = new Blah(); 
     System.out.println(blah.hello); 
    } 
} 

をコード印刷「NULL」。

+0

さて、私はそれを得る。パスワードなしでこのコードを実行する新しいコンピュータが見つかりました。私はデータベースを開いている間、私はパスワードをリセットしたと思います。一つは仕事、もう一つは応答できないものです。 – kilien

関連する問題