2011-08-30 22 views
0
public class SetupConnection{ 

    public static Statement setCon(){ 
    Connection con=null; 
    Statement st=null;     

    try{ 
     Class.forName("com.mysql.jdbc.Driver").newInstance(); 
     con=DriverManager.getConnection(
         "jdbc:mysql://localhost:3306/zomatocrm","root",""); 
     st = con.createStatement(); 
    } 
    catch(ConnectException err){ 
     JOptionPane.showMessageDialog(null, "Connection refused!!!"); 
     System.out.println(err.getMessage()); 
    }    
    catch(Exception e){ 
     System.out.println(e.getMessage());     
    } 
    return st; 
    } 

警告:語法警告顯示:異常從來沒有在try語句的身體扔

異常從來沒有在try語句

catch(ConnectException){線即將到來的身體扔。在try塊

+1

只要刪除該catch條款。正如例外說的那樣,這個異常永遠不會從try體內拋出。 –

回答

2

無代碼:

Class.forName("com.mysql.jdbc.Driver").newInstance();  
con=DriverManager.getConnection(
    "jdbc:mysql://localhost:3306/zomatocrm","root",""); 
st = con.createStatement(); 

...都不能扔ConnectException。因此,編譯器警告您這catch子句:

catch(ConnectException err){ 
    JOptionPane.showMessageDialog(null, "Connection refused!!!"); 
    System.out.println(err.getMessage()); 
} 

是多餘的。如果刪除它,警告將消失。

1

getConnectioncreateStatement throw SQLException,這是抓住你的第二個catch塊。 ConnectException從未拋出...

1

注意,如果到數據庫的連接失敗由於網絡問題,你仍然只能得到一個SQLException,所以抓住這將是更好的,如果你想,以確定是否有一個網絡問題,您可以檢查SQLState(根據the manual):

try { 
    ... 
} catch (SQLException sqle) { 
    if ("08S01".equals(sqle.getSQLState())) { 
     JOptionPane.showMessageDialog(null, "Connection refused (or networking problem)!!!"); 
     System.out.println(err.getMessage()); 
    } 
} 

而且(作爲一個普遍的觀點,而不是與這個錯誤),你的方法創建一個連接(con對象),但它沒有引用曾經回來,那麼你如何關閉連接?不關閉連接可能會導致連接泄漏,這會導致您的問題。

+0

我怎麼能返回一個參考,然後... – srijan

+0

P.S m nt在java中的專家,所以請解釋一下.... – srijan

+0

我ws using con.close();直到現在n ws沒有問題了! – srijan

1

你真正的問題已被其他人回答。我只是想指出,這...

catch (Exception e) { 
    System.out.println(e.getMessage());     
} 
return st; 

...是非常糟糕的代碼

你正在做的是將堆棧跟蹤轉儲到stderr,然後繼續,就好像沒有什麼不好發生一樣。問題是:

  • Exception你剛好趕上可以通過各種各樣的事情,其中​​的一些不容忽視的引起的,

  • stderr流可以連接到沒什麼,

  • (可能更糟糕)原始堆棧跟蹤可能會顯示給一個非Java識字的用戶,他們不會理解它,以及誰可能忽略它或被嚇倒!

+0

我愛泰格我ws anywy nt布萊恩就這樣離開吧...... bt我想知道這個警告是在我的netbeans中出現的...... bcoz它在嘗試塊內! – srijan

+0

很高興你已經知道這一點。但如果這是在我的臨時代碼中,我不會將它展示給任何人** ......更不用說一大堆關於SO的Java專家了。另一個問題是,在代碼進入版本控制/生產之前,你可能會忘記修復它。 –

+0

感謝哥們......我會在未來照顧它! – srijan

相關問題