2009-06-21 5 views
1

私は、エラーを見つけることができない方法を...持っている:このJavaコードからNull Pointer Exceptionを取得するのはなぜですか?

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を取得しました。

編集: 私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; 
    } 

例外:

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

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方法では、NullPointerExceptionDBCommunicator.javaのライン107の場所で投げられたということです。

さらに、getStatmentメソッドは、メソッドのDBManager.javaの358行目から呼び出されました。

したがって、チェックする必要があるのは、DBCommunicator.javaの107行目です。

何行番号が与えられたコードスニペットではありませんが、一つはNullPointerExceptionは、以下の行で発生したことを推測することができますNullPointerException秒程度はかなり一般的である一つのことがあります

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

- 彼らは一般的に発生しますメソッド呼び出しがnull参照で実行されるとき存在しないオブジェクトのメソッドを呼び出すと、NullPointerExceptionがスローされます。

上記のコードではConnectionではなくの変数が実際にはconnectionであると予想されます。

これは、初期化されたデータベースへの有効な接続を持たずにnullという変数がなぜ発生するのかを追跡しようとします。

1

それはあなたのクエリが失敗しているので、それを変更してみてください、おそらくです元のクエリには末尾のセミコロンが付いていますが、これは不正です。これにより、後の段階でnullpointerexceptionがスローされる可能性があります。例外の内容を投稿することをお勧めします。

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); 

これは、私がOracleを使用していることです。

関連する問題