2013-05-07 2 views
2

Я пытаюсь добавить строку в моей базе данных у сотрудника таблицы. Но я получаю исключение:NullPointerException при добавлении в MySQL

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

+0

Пожалуйста, еще немного информации, чтобы лучше понять ... – Ajit

+0

вы должны проверить 'conn! = Null' * * до ** вы вызываете 'createStatement' на нем –

ответ

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

Это не работает, как spected проверка на пустые значения. Вы хотите вернуть emp, если все поля заполнены, но вы возвращаете 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

Я должен порекомендовать вас, если это не СТРОГО НЕОБХОДИМО, НИКОГДА инициализировать переменные. Иногда, нулевые указатели могут свести вас с ума, и если вы обращаетесь SQLException и ClassNotFoundException с помощью:

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

Вам не нужно добавлять throws пункт к вашим методам.

0

jTextField1.getText() - пожалуйста, добавьте пустой чек jTextField1 .. если его нулевой .getText() может выбросить исключение Null указатель

+0

Это не проблема в этот конкретный случай –

0

Хорошо, теперь, что вы положили в номера строк ясно, что ep является null:

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

Это мой исходный код (EmployeeBD класс):

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

Да, я также подумал, что, но если я инициализирую переменные со значениями, также происходит – DavidM

+0

, пожалуйста, покажите нам код, где вы инициализируете 'ep' и вызываете вышеуказанный метод. Возможно также, что номера строк неверны из-за строк комментариев. Вы пытались отладить еще? –

0

Рассмотрим работу на если-то еще блок R eadEmployee:

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

Условное состояние гласит: если имя пустое или NIF пуст или зарплата не является нулевой, а затем вернуться эм.

Но согласно другому блок будет выглядеть, если условие должно быть:

if (! name.equals("") && ! nif.equals("") && salary != null) 
Смежные вопросы