2009-06-21 3 views
1

У меня есть метод ... где я не могу найти ошибку:Почему я получаю исключение Null Pointer из этого кода Java?

public String getUsernameforID(int id) { 
    String statment = "SELECT USERNAME FROM `BENUTZER` WHERE `ID` = ? ;"; 
    String username = null; 
    try { 
     PreparedStatement ps = dbCommunicator.getStatment(statment); // HERE : NULL POINTER EXECTION 
     ps.setInt(1, id); 
     ResultSet rs = dbCommunicator.readFromDB(ps); 

     if (rs.first()) { 
      username = rs.getString("USERNAME"); 
     } 
    } catch (SQLException ex) { 
     Logger.getLogger(DBManager.class.getName()).log(Level.SEVERE, null, ex); 
    } 
    return username; 

Я думаю, что это заявление ... но как я могу найти это? Я получаю Null Pointer Exeption.

Edit: мой getStatment-метод:

public PreparedStatement getStatment(String st) { 
    connect(); 
    PreparedStatement ps = null; 
    try { 
     ps = (PreparedStatement) connection.prepareStatement(st); 
    } catch (SQLException ex) { 
     Logger.getLogger(DBCommunicator.class.getName()).log(Level.SEVERE, null, ex); 
    } 
    return ps; 
    } 

Исключение:

Exception in thread "main" java.lang.NullPointerException 
    at test.DBCommunicator.getStatment(DBCommunicator.java:107) 
    at test.database.DBManager.getUsernameforID(DBManager.java:359) 
    at dbtestdrive.Main.main(Main.java:25) 
+0

который вы используете? – Macarse

+0

Я использую mySQL – darkrain

+0

NullPointerException .. где? – dfa

ответ

5

Хотя этот вопрос, возможно, был решен, вот немного о том, как вести отладку с учетом трассировки стека.

В этом случае трассировки стека заключается в следующем:

Exception in thread "main" java.lang.NullPointerException 
    at test.DBCommunicator.getStatment(DBCommunicator.java:107) 
    at test.database.DBManager.getUsernameforID(DBManager.java:359) 
    at dbtestdrive.Main.main(Main.java:25) 

То, что это свидетельствует о том, что в способе test.DBCommunicator.getStatment, А NullPointerException был брошен в месте линии 107 DBCommunicator.java.

Кроме того, метод getStatment был вызван по линии 358 от DBManager.java, который находится в методе DBManager.getUsernameforID.

Таким образом, первое, что необходимо проверить, это то, что происходит по строке 107 от DBCommunicator.java.

Хотя нет номера строк в фрагменте кода данные, можно предположить, что NullPointerException произошло в следующей строке:

ps = (PreparedStatement) connection.prepareStatement(st); 

Там одна вещь, которая является довольно распространенным явлением о NullPointerException с - они обычно возникают когда вызовы методов выполняются по ссылке null. Вызов метода для объекта, который не существует, выдает NullPointerException.

В приведенном выше коде можно ожидать, что переменная connection на самом деле является null, вместо того, чтобы иметь Connection.

Это должно привести к попытке отследить, почему переменная connection равна null, а не имеет действительное соединение с инициализацией базы данных.

1

Это, вероятно, потому, что ваш запрос не удается, попробуйте изменить его:

String statment = "SELECT USERNAME FROM `BENUTZER` WHERE `ID` = ?"; 

В вашем исходном запросе была завершающая точка с запятой, что является незаконным. Это могло привести к тому, что на более позднем этапе возникло бы исключение nullpointer, я бы посоветовал вам опубликовать содержимое вашего исключения.

EDIT:

dbCommunicator.getStatment(statment); 

Должно быть:

dbCommunicator.getStatement(statment); 

Вы орфографические ошибки 'о' как 'даного', который отлично подходит для имени переменной, но не обращаясь к методу :)

+0

нет .. это не проблема :( – darkrain

+0

Так что вставьте свое исключение или, по крайней мере, номер строки, который его выбрасывает – karim79

+0

См. Мои править, пожалуйста, – karim79

0
//Ending ";" inside the string, is not neccessary. 
String statment = "SELECT USERNAME FROM `BENUTZER` WHERE `ID` = ? ;"; 

Вместо:

PreparedStatement ps = dbCommunicator.getStatment(statment); 

PreparedStatement ps = dbCommunicator.prepareStatement(statment); 

Это то, что у меня есть оракул.

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