предупреждение о синтаксисе: исключение никогда не генерируется в теле оператора try - PullRequest
0 голосов
/ 30 августа 2011
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 ]

2 голосов
/ 30 августа 2011

Нет кода в вашем блоке 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 голос
/ 30 августа 2011

На ваш реальный вопрос ответили другие.Я просто хочу отметить, что этот ...

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

... действительно плохой код .

То, что вы делаете, - это сброс трассировки стека до stderr и затем продолжение, как будто ничего плохого не произошло.Проблема в том, что

  • Exception, который вы только что поймали, может быть вызван всевозможными вещами, некоторые из которых не следует игнорировать, и

  • поток stderr может быть подключен ни к чему,

  • (может быть, и хуже), необработанная трассировка стека может отображаться не грамотным пользователем Java, который не поймет этого и ктоскорее всего либо проигнорирует это, либо взбесится!

1 голос
/ 30 августа 2011

Обратите внимание, что если соединение с базой данных не удается из-за проблем с сетью, вы все равно получите только SQLException, поэтому отлов будет лучше, и если вы хотите определить, была ли проблема с сетью, вы можете проверить SQLState (согласно инструкции ):

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

Также (как правило, не связанный с этой ошибкой) ваш метод создает соединение (con объект), но ссылка на него не возвращается, так как вы закрываете соединение? Не закрытие соединения может привести к утечке соединения, что вызовет проблемы.

1 голос
/ 30 августа 2011

getConnection и createStatement throw SQLException, которые попадают в ваш второй блок catch.ConnectException никогда не бросают ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...