2015-10-07 163 views
0

空指針異常有兩種方法如何避免在java中

public EmployeeBean viewEmployeeByID(String EmployeeID) 

public EmployeeBean findByID(String id) 

考慮,什麼是應該每種方法的描述做

public EmployeeBean findByID(String id) 
  • 這個方法應該使用JDBC選擇語句以基於給定的員工ID檢索記錄,
  • 將字段存儲在EmployeeBean中並返回Employee bean。
  • 在任何JDBCExceptions的或情況下,如果ID不存在於數據庫中,然後空值需要返回

public EmployeeBean viewEmployeeByID(String EmployeeID)

  • 調用的所述findByID(字符串ID)方法EmployeeDAO類。

  • 如果找到記錄,詳細信息應存儲在EmployeeBean對象中並返回。

  • 如果記錄未找到或者具有INVALID empID(例如空字符串「」),那麼應該將EmployeeBean指定爲null並返回。

代碼如下書面每種方法

public EmployeeBean findById(String id){ 
EmployeeBean emp = null; 

try{ 
    statement = DBUtil.getDBConnection().prepareStatement("SELECT * FROM EMPLOYEE_TBL WHERE EMPID=?"); 
    statement.setString(1,id); 

    if(statement.executeUpdate() == 1){ 
     resultSet = statement.getResultSet(); 
     while(resultSet.next()){ 
      emp = new EmployeeBean(
        resultSet.getString(1), 
        resultSet.getString(2), 
        resultSet.getDate(3), 
        resultSet.getString(4), 
        resultSet.getFloat(5) 
        ); 
     } 
     return emp; 
    } 
    else{ 
     return null; 
    } 
}catch(SQLException e){ 
    return null; 
}catch(NullPointerException e){ 
    return null; 
}  
} 




public EmployeeBean viewEmployeeByID(String empId){ 

     if((employeeBean = this.database.findById(empId)) != null) 
     return employeeBean; 
      return (EmployeeBean = null); 

} 

如果我試圖找到一個ID是不存在於數據庫中,它返回null,我得到空指針異常。

問題

  1. 難道我的片段statisfy上述每種方法給出的所有要求。如果不是這樣,請讓我知道

  2. 有沒有什麼辦法可以避免空指針異常?

+4

您的viewEmployeeByID編譯,我不這麼認爲 –

+1

*「如果沒有找到記錄或者具有INVALID empID(例如空字符串」「),那麼應該給EmployeeBean指定null並返回。」*似乎滿足要求。當你從這些方法中得到一個值時,你需要測試一個'null'返回結果。另一種解決方案是拋出一個「未找到記錄」的異常,但這可能只是有點過分 – MadProgrammer

+0

@JunedAhsan它編譯但每當我通過錯誤的編號我得到空錯誤 – James92

回答

1

由於您有2個返回語句,您的代碼段不會首先編譯。 此外代碼滿足條件。 但在你的findById()裏面,你應該先檢查resultSet != null,然後再做其他事情。那麼這將避免NPE在你的情況。

+0

「你的代碼片段不會像第一個那樣編譯,因爲你有2個返回語句。」你能告訴我我應該做什麼嗎? – James92

+0

我會說同樣的。避免NullPointerException只能通過執行非空檢查來完成。在對它們進行調用之前,它可以在所有對象上完成。包括聲明,連接。 – Acewin

+0

保留'return employeeBean;'並刪除其他 – smurf