简体   繁体   中英

syntax warning showing: exception is never thrown in body of try statement

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;
  }

The warning:

exception is never thrown in body of try statement

is coming up at the catch(ConnectException){ line.

None of the code in your try block:

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

...can ever throw a ConnectException . Therefore the compiler is warning you that this catch clause:

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

is redundant. If you remove it, the warning will go away.

getConnection and createStatement throw SQLException , which is caught in your second catch block. ConnectException is never thrown...

Note, if the connection to the database fails due to network problems, you'll still only get a SQLException , so catching that would be better and if you want to determine whether there was a networking problem you could check the SQLState (according to the manual ):

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

Also (as a general point, not related to this error), your method creates a connection ( con object), but no reference to it is ever returned, so how are you closing the connection? Not closing a connection can lead to a connection leak, which will cause you problems.

Your real question has been answered by others. I just want to point out that this ...

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

... is really bad code .

What you are doing is dumping a stacktrace to stderr , and then continuing as if nothing bad has happened. The problem is:

  • the Exception you just caught could be caused by all sorts of things, some of which should not be ignored, and

  • the stderr stream might be connected to nothing,

  • (maybe worse) the raw stacktrace could be displayed to a non-Java literate user who won't understand it and who is likely to either ignore it or freak out!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM