2010-11-22 26 views
2

私には以下のような状況があります。データベース(MySQL)に接続されたJavaコードがあります。私はEclipseからJavaコードを実行し、データベースからデータを取得すると、すべてがOKです。 しかし、私は、アプレットとしてhtmlコードからJavaコードを実行していたときに、それがNULLポインタ例外をスローし、私はこのケースでは、その問題を検出し、次のJavaコードに発生します。nullポインタの例外がgetConnection()にスローされます

private Connection getConnection() throws SQLException{ 
    try { 
     Class.forName("com.mysql.jdbc.Driver"); 
     String name="jdbc:mysql://localhost:3306/sensors_data"; 
     String username="root"; 
     String psw="11111"; 

     conn = DriverManager.getConnection(name,username,psw); 
    } catch(Exception e) { 
     e.printStackTrace(); 
    } 
    return conn; 

}

オブジェクト「CONN " 無効である。

+0

あなたはeclipseからあなたのために働いたのと同じマシンでアプレットを実行していますか? –

+0

アプレットは署名されていますか? –

+1

私はあなたの本当のパスワードではないことを願っています – darioo

答えて

1

localhostを、データベースが存在するマシン名に置き換え、再度実行してください。

5

まあ、DriverManager.getConnection()が例外をスローすると、例外が出力されますが、とにかくconnが返されます。おそらく例外を呼び出し側に伝える必要があります。結局のところ、呼び出し元が今使用できる接続を持つようなものではありません。

(あなたはまた、悪い考えである、だけではなくSQLExceptionの、任意の例外をキャッチしている。)

私もアプレットからデータベースに直接接続できるように期待していません - 私はアプレットネットワーク接続の正確な制限を覚えていませんが、それは問題になるかもしれません。データベースはWebサーバーと比較してどこに実行されていますか?アプレットが公開されているのと同じホスト上にない場合は、特別な許可なしに接続することはできません。

DriverManager.getConnectionによってスローされた例外は、デバッグログにはもちろん表示されます(コールの最初のポートである必要があります)。例外処理を修正しました。

-1

問題は、try {}スレッド内でconnを返す必要があることです。または、クラスフィールドとして接続変数を作成し、try {}トレッド内の接続にconn値を割り当てると、問題はうまく解決されます。

public static Connection conn1 = null; 

public static Connection getConnection(){ 
    try { 
     Class.forName("com.mysql.jdbc.Driver").newInstance(); 
     Connection conn = DriverManager.getConnection 
       ("jdbc:mysql://localhost/?user=root&password=root"); 
     if(conn != null){ 
      System.out.println("Connect database successfully."); 
      conn1 = conn; 
     } 
     else System.out.println("Connection failed..."); 
     return conn; 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return null; 
} 
+1

申し訳ありません..しかし、これは意味をなさないです:) NPEはOPのケースで発生します。なぜなら、例外をスローする代わりにスタックトレースを出力しただけなので、コードを実行させ続けるからです。 – BalusC

関連する問題