Эта переменная 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();
}
(Если вы обнаружите исключение для диагностических целей, вы всегда должны печатать или регистрировать трассировку стека!)