DriverManager.getConnection ( "URL");не может поймать любое исключение - PullRequest
0 голосов
/ 17 июня 2019

Android-приложение подключено к базе данных с помощью библиотеки JDBC. Но DriverManager.getConnection ("url") возвращает ноль. Поэтому я попытался поставить «попробуй ... поймать» так:

      Connection con = null;
      try {

            con = DriverManager.getConnection("dummy url");
            System.out.println("Connected.");

      }catch(ClassNotFoundException ce){
            System.out.println("ClassNotFoundException ");
      }catch(SQLException se){
            System.out.println("SQLException ");
      }catch(Exception e){
             System.out.println("Exception ");
      }finally {
            if (con== null) {
               System.out.println("Result: null");
            }else{
               return con;
            }
      }

Выход:

      Result: null

Если URL неверный, попробуйте ... Catch должно быть кэшировано какое-то исключение. Но он пропустил все исключения и getConnection ("фиктивный URL") возвратил ноль.

Хотя я пытался изменить на реальный URL , но проблема не в этом.

Обновлено: Я изменил код

  1. добавить условие в область наконец
  2. переместить объявление con varialbe в конец.

Он по-прежнему не может поймать ни одного исключения

1 Ответ

2 голосов
/ 17 июня 2019

Эта переменная con, объявленная в блоке try, находится вне области действия в предложениях catch и finally.

Единственный способ компиляции этого кода - это если вы объявили другойcon переменная ... вероятно, как поле окружающего класса.

Это объясняет, почему вы видите con со значением null, когда это, очевидно, не может произойти.Вы печатаете other con.


Обратите внимание, что DriverManager.getConnection(...) никогда не вернет null. javadoc утверждает, что возвращает объект Connection и ничего больше.Если метод может вернуть null, документация скажет об этом явно.


ОБНОВЛЕНИЕ После того, как вы исправили проблему с областью видимости с помощью con.Теперь возможно, что проблема в том, что вы не ловите исключение.В частности, это может быть исключение Error, которое может возникнуть, если возникла проблема с загрузкой (скажем) соответствующего класса драйвера JDBC.

Измените

  }catch(ClassNotFoundException ce){
        System.out.println("ClassNotFoundException ");
  }catch(SQLException se){
        System.out.println("SQLException ");
  }catch(Exception e){
         System.out.println("Exception ");

на

  } catch(Throwable e) {
         e.printStackTrace();
  }

(Если вы обнаружите исключение для диагностических целей, вы всегда должны печатать или регистрировать трассировку стека!)

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