Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException
вообще.
См. также: A хороший список лучших практик
Я бы добавил, очень важно, хорошо использовать модификатор final
. Использование "окончательной" модификатор, когда это применимо в Java
Сводка:
final
для обеспечения хорошей инициализации. @NotNull
и @Nullable
if("knownObject".equals(unknownObject)
valueOf()
поверх toString (). StringUtils
StringUtils.isEmpty(null)
. Я столкнулся с точно таким же поведением:
Я использую Oracle XE и MS SQL Server Express на моем 64-битном ПК с Windows 7 - я обновился до java 1.6.0_29 с 1.6.0_27 (версия x64) и был удивлен, увидев, что те же программы могут подключаться к Oracle XE, но не к MS SQL Server ...
Я проследил проблему до javax.sql.DataSource.getConnection()
, где она висела навсегда - потому что это всего лишь интерфейс, драйверы jdbc вызвали у меня подозрения ...
Я использую драйвер JDBC для MS SQL Server 3.0.1301.202 и даже обновился до CTP-версии SQL Server («предварительный технический обзор сообщества») 4.0.1722.1, потому что я подозревал, что он должен что-то делать с драйвером jdbc но безуспешно: все еще висит!
Мой обходной путь должен был понизиться до 1.6.0_27 и - bang: все снова было хорошо!
С наилучшими пожеланиями, Эрих
Смотрите решение здесь. https://forums.oracle.com/forums/thread.jspa?messageID=9954398&tstart=0 http://social.msdn.microsoft.com/Forums/. ru / sqldataaccess / thread / 97dce8fd-6487-4bca-80b0-492167db3e0d
«По-видимому, это связано с использованием SSL и может быть смягчено путем замены jsse.jar в jre / lib на тот, что был ранее версия, например, из версии 1.6.0_27. Меня смутило то, что 1.6.0_29 работает с MS JDBC и более старыми установками SQL Server '05, которые не выполняют безопасных соединений. Все более новые серверы (SQL Server '08 R2) потерпеть неудачу, поскольку им требуется SSL, а Java 1.6.0_29 в этом случае не работает с использованием jTDS или MS JDBC. "
Как к вашему сведению, существует новая сборка шага № 30 в семействе 1.6, которая устраняет проблему: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7103725
У меня та же проблема с зависанием, и только с Java 1.6.0_29. Я заметил, что при обновлении до 7.1 проблема исчезнет
Та же проблема здесь (SQLJDBC4, MsSQL 2008 R2, JDK1.6.0.29), но после обновления до 1.6.0.30 проблема была решена ...
Так что это должно быть критической ошибкой в DriverManager версии 1.6.0.29
Обновление до 1.6.0_30 также работало для меня. Microsoft выпустила заявление , объявляющее об исправлении в первом квартале 2012 года. Похоже, это уязвимость Java (BEAST).
У меня была точно такая же проблема, когда jBoss зависал на driver.getConnection (). Однако я использовал jBoss EAP 5.1, java 1.6.0_37x64, Sql Server 2005 и jtds1.2.5 в качестве драйвера jdbc.
Обходной путь, который мне пришлось использовать, - это настройка jvm при запуске: -Djsse.enableCBCProtection = false, и это решило ее.
Я не считаю это исправлением, а скорее обходным решением на данный момент.
Я нашел ошибку: 7105007: Microsoft & amp; JTDS JDBC драйвер сломался после обновления до 1.6.0_29 , который был очень похож, но имел другую причину. Что было интересно, так это то, что он появился как на драйверах MS, так и на драйверах jtds.