2010-11-22 69 views
2

我有以下情況:我有一個與數據庫(MySQL)連接的java代碼。當我從eclipse運行java代碼並從數據庫獲取數據時,一切正常。 但是,當我運行從HTML代碼Applet的Java代碼,它拋出空指針異常,我發現在這種情況下,這個問題會出現以下Java代碼:空指針異常拋出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; 

}

對象「康恩「 一片空白。

+0

你在eclipse中爲你工作的同一臺機器上運行applet嗎? – 2010-11-22 08:13:15

+0

小程序是否已簽名? – 2010-11-22 08:16:01

+1

我希望這不是你真正的密碼 – darioo 2010-11-22 08:19:46

回答

1

將localhost替換爲數據庫所在的計算機名稱,然後重試。

5

那麼,如果DriverManager.getConnection()引發異常,您打印出異常,但隨後返回conn。你應該讓異常傳播給調用者 - 畢竟,它不像調用者現在有一個他們可以使用的連接。

(你也趕上任何例外,而不是僅僅SQLException,這是一個壞主意。)

我不會期望能夠直接從applet連接到數據庫,但 - 我不記得小程序網絡連接的確切限制,但這可能是問題所在。與Web服務器相比,數據庫在哪裏運行?如果它不在applet發佈的主機上,我不希望它能夠在沒有特殊權限的情況下進行連接。 (試圖連接到localhost特別不大可能奏效,我懷疑。)

你應該能夠看到DriverManager.getConnection當然,在你的調試日誌拋出的異常 - 這應該是通話的第一口,以及修復異常處理。

-1

問題是你應該返回try {}線程中的conn。或者,您可以創建一個連接變量作爲類字段,然後將conn值分配給try {}中的連接,然後希望問題得到解決。

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

對不起..但是這沒有任何意義:) NP是在OP的情況下,因爲他只是打印堆棧跟蹤,而不是拋出異常,從而讓代碼繼續運行。 – BalusC 2012-11-16 23:37:01