语法警告显示:异常永远不会在try语句的主体中抛出

时间:2011-08-30 11:52:29

标签: java mysql exception-handling

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语句的主体中抛出

即将出现在catch(ConnectException){行。

4 个答案:

答案 0 :(得分:2)

你的try块中没有代码:

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 :(得分:1)

getConnectioncreateStatement抛出SQLException,它会在您的第二个捕获区中被捕获。永远不会抛出ConnectException ......

答案 2 :(得分: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对象),但是不会返回对它的引用,那么如何关闭连接?不关闭连接可能会导致连接泄漏,这会导致问题。

答案 3 :(得分:1)

你的真实问题已得到其他人的回答。我只是想指出这个......

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

... 非常糟糕的代码

您正在做的是将堆栈跟踪转储到stderr,然后继续,好像什么都没发生一样。问题是:

  • 你刚抓到的Exception可能是由各种各样的事情造成的,其中一些不应该被忽视,

  • stderr流可能没有连接,

  • (可能更糟)原始堆栈跟踪可以显示给非Java文化用户,他们不会理解它,也可能忽略它或者吓坏了!