簡體   English   中英

空指針異常拋出getConnection()

[英]Null Pointer Exception throws in getConnection()

我有以下情況:我有一個與數據庫(MySQL)連接的Java代碼。 當我從Eclipse運行Java代碼並從數據庫中獲取數據時,一切正常。 但是,當我從Applet的html代碼運行Java代碼時,它將引發Null Pointer Exception,並且在以下情況下,我檢測到以下Java代碼會發生該問題:

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”為空。

好吧,如果DriverManager.getConnection()引發異常,則說明您正在打印異常,但無論如何都會返回conn 您可能應該讓異常傳播給調用者-畢竟,這與調用者現在可以使用的連接不同。

(您還捕獲了所有異常,而不僅僅是SQLException ,這是一個壞主意。)

我不希望能夠從applet直接連接到數據庫-我不記得對applet網絡連接的確切限制,但這很可能就是問題所在。 與Web服務器相比,數據庫在哪里運行? 如果它不在發布該applet的同一主機上,那么我將不希望它在沒有特殊權限的情況下完全能夠建立連接。 (我懷疑嘗試連接到localhost特別不可能。)

您當然應該能夠在調試日志中看到DriverManager.getConnection引發的異常-它應該是調用的第一個端口,並且可以修復異常處理。

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

問題是您應該在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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM