2013-05-07 27 views
2

我試圖在我的數據庫中,在表員工添加一行。 但我得到一個異常:在MySQL中添加NullPointerException

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
    at ConnectionBD.EmployeeBD.add(EmployeeBD.java:56)` 

這是我的源代碼(EmployeeBD類):

public void add() throws SQLException, ClassNotFoundException { 
56  Employee a = ep.ReadEmployee(); 
57  if (a!=null) { 
58   Connection conn = null; 
     try { 
      Class.forName(BDConnect.DRIVER); 
      conn = DriverManager.getConnection(BDConnect.BD_URL, BDConnect.USUARI, BDConnect.PASSWORD); 
      Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); 
      if (conn != null) { 
       String sql = "SELECT * FROM employee"; 
       ResultSet rs = stmt.executeQuery(sql); 
       rs.moveToInsertRow(); 
       rs.updateString("nif", a.getNif()); 
       rs.updateString("name", a.getName()); 
       rs.updateDouble("salary",a.getSalary()); 
       System.out.println("Added Suscefully"); 
       rs.insertRow(); 
       rs.moveToCurrentRow(); 
      } else { 
       System.out.println("Can't get DB"); 
      } 
     } catch (SQLException ioe) { 
      System.out.println(ioe); 
     } catch(ClassNotFoundException ex) { 
      System.out.println(ex); 
     } 
    } 
} 

而且ReadEmployee()方法:

public Employee ReadEmployee() { 
    String nif = null; 
    String name = null; 
    Double salary = null; 
    int depId = 0; 

    nif = jTextField1.getText(); 
    name = jTextField2.getText(); 
    salary = Double.parseDouble(jTextField3.getText()); 
    Employee emp = new Employee(nif, name, salary, 1); 

    if (name.equals("") || nif.equals("") || salary != null) { 
     return emp; 
    } else { 
     JOptionPane.showMessageDialog(this, "Fill all TextFields", "Article warning", JOptionPane.WARNING_MESSAGE); 
     return null; 
    } 
} 

爲什麼它拋出異常? 我不知道該怎麼改正!

+5

請在源代碼中寫出行號,以便我們能夠找出引發異常的行。謝謝 – Rohit 2013-05-07 09:00:41

+0

請更多的信息,以更好地瞭解... – Ajit 2013-05-07 09:07:26

+0

你應該檢查'conn!= null' * *之前**你調用'createStatement' – 2013-05-07 09:09:10

回答

1
if (name.equals("") || nif.equals("") || salary != null) { 
    ... 
} 

這不是工作爲空值spected檢查。如果所有字段都已填寫,則要返回emp,但如果名稱或nif爲空或薪資不爲空,則返回emp。要正確地檢查它,你必須使用:

if (!name.equals("") && !nif.equals("") && salary != null) { 
    return emp; 
} 

而對於else條件,如果你想扔的消息時單場這不是填補了使用:

else if (name.equals("") || nif.equals("") || salary == null) { 
    JOptionPane.showMessageDialog(this, "Fill all TextFields", "Article warning", JOptionPane.WARNING_MESSAGE); 
    return null; 
} 

UPDATE

我必須推薦你,如果它不是嚴格必要的,永遠不要初始化變量。有時,空指針可以驅動你瘋了,如果你使用的是處理SQLExceptionClassNotFoundException

try { 
    ... 
} catch (SQLException ex) { 
    ... 
} catch (ClassNotFoundException ex) { 
    ... 
} 

您不必throws條款添加到您的方法。

0

jTextField1.getText() - 請立即加空支票jTextField1 ..如果空.getText()可以拋出空指針異常

+0

這不是問題所在這個具體案例 – 2013-05-07 09:09:55

0

好吧,你已經把在行號很顯然,epnull

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
    at ConnectionBD.EmployeeBD.add(EmployeeBD.java:56)` 

這是我的源代碼(EmployeeBD類):

56 Employee a = ep.ReadEmployee(); 
+0

是的,我也認爲,但如果我初始化變量的值也發生 – DavidM 2013-05-07 09:22:43

+0

請向我們展示代碼,你在哪裏初始化'ep'並調用上述方法。由於註釋行,行號可能也是不正確的。你嘗試過調試嗎? – 2013-05-07 09:23:43

0

考慮R的的if-else塊上的工作eadEmployee:

if (name.equals("") || nif.equals("") || salary != null) { 
    return emp; 
} else { 
    JOptionPane.showMessageDialog(this, "Fill all TextFields", "Article warning", JOptionPane.WARNING_MESSAGE); 
    return null; 
} 

if條件規定:如果name爲空或者nif爲空或者salary不爲null,則返回emp。

但按照else塊的樣子,如果條件應該是:

if (! name.equals("") && ! nif.equals("") && salary != null) 
相關問題