#java #sql-server #sql-server-2008 #jdbc
#java #sql-сервер #sql-server-2008 #jdbc
Вопрос:
Я не знал, где написать что-нибудь об этом, и решил сделать это здесь.
После долгого времени отладки моей программы я смог выяснить, что вызывающий Driver.getConnection (строка, string, string) зависает вызывающий поток. Почему (?), Я действительно не знаю, но я мог бы выяснить, что это происходит с java 1.6.0_29, а не с java 1.6.0_26.
Полная среда:
-
ОС: протестирована как на redhat 6.1, так и на Windows 2008
-
Драйвер: драйвер MS SQL Server JDBC версии 3.0.1301.101
-
Версии Java: 1.6.0_26 и 1.6.0_29
Как я уже говорил ранее, это работает с 1.6.0_26.
Есть ли у кого-нибудь идеи, что может быть причиной этого? Может быть, какой-нибудь разработчик? :p
С наилучшими пожеланиями,
Rui
Комментарии:
1. Здесь та же проблема. Windows 7 x64, JDK 1.6.0_29, SQL Express 2008 R2 (10.50.1790), используя sqljdbc4.jar и он зависает на getConnection. В то время как для меня это сработало / работает просто отлично с 1.6.0_24 (я еще не пробовал другие версии, только эти две.)
2. Воспроизводится с SQL server 2008R2. SQL 2005 и 2008 работают нормально.
3. Проблема решена в версии 1.6.0.30
4. Да, была такая же проблема с 1.6.0_29, и я проверил исправление в 1.6.0_33.
Ответ №1:
Я столкнулся с точно таким же поведением:
Я использую как 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, и я даже обновился до SQL Server CTP («предварительный технический просмотр сообщества») 4.0.1722.1, потому что я подозревал, что он должен что-то делать с драйвером jdbc, но безуспешно: все еще висит!
Моим обходным путем было понижение версии до 1.6.0_27 и — bang: все снова было в порядке!
с наилучшими пожеланиями, Эрих
Комментарии:
1. Я также добавил отчет об ошибке в базе данных Java Bug. Но поскольку Oracle взяла верх, это вряд ли работает. Я ничего не слышал от Oracle и не могу найти другие ошибки на данный момент…
2. Итак, как именно вы понижаете java до 1.6.0_xx в OSX Lion?
Ответ №2:
Воспроизведено: проблема возникает с комбинацией
- Драйвер SQL 2.0
- Драйвер SQL 3.0
- Драйвер SQL 4.0 CTP 3
-
Драйвер jTDS SQL 1.2.5
-
SQL server 2008R2
-
Java 1.6.0_29
Измените либо версию SQL Server (протестировано в 2005 и 2008 годах), либо версию Java (1.6.0_27, 1.7.0_1), и проблема больше не возникает.
Клиент / серверная ОС: Windows 2008R2
Добавлено в базу данных ошибок Java и над ним работает Oracle.
Перекрестное размещение на форуме Microsoft MSDN по доступу к данным (принятый ответ: обновление до java 7) и на форумах Oracle Java JDBC (информация, добавленная здесь, также добавляется в базу данных ошибок Java).
Ответ №3:
Смотрите решение здесьhttps://forums.oracle.com/forums/thread.jspa?messageID=9954398amp;tstart=0 http://social.msdn.microsoft.com/Forums/en/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 «.
Ответ №4:
К вашему сведению, похоже, что в семействе 1.6 появилась новая пошаговая сборка # 30, которая устраняет проблему:http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7103725
Ответ №5:
У меня такая же проблема зависания, но только с java 1.6.0_29. Я заметил, что если я обновлюсь до 7.1, проблема исчезнет
Ответ №6:
Я так счастлив, что нашел этот форум. У меня была такая же проблема при обновлении (на самом деле я обновился с 1.6.0_22 до 1.7.1, затем понизил рейтинг до 1.6.0_29, когда проблема возникла.
Еще одна вещь, которую я заметил: если я использую 1.6.0_29 jre, это не удается, но если я использую 1.6.0_29 jdk, это работает… Я потратил около дня, пытаясь понять, почему eclipse (который использовал jre) терпел неудачу, в то время как MyEclipse (который использовал jdk) работал….
Как ошибка может быть внесена в такой поздний выпуск? (Я нахожусь в процессе подготовки рекомендации по рабочей версии Java).
Ответ №7:
Та же проблема здесь (SQLJDBC4, MsSQL 2008 R2, JDK1.6.0.29), но после обновления до 1.6.0.30 проблема была решена…
Таким образом, это должна быть критическая ошибка в DriverManager версии 1.6.0.29
Ответ №8:
Обновление до 1.6.0_30 также сработало для меня. Microsoft выпустила заявление, объявляющее об исправлении в первом квартале 2012 года. Похоже, что это уязвимость Java (ЗВЕРЬ).
Ответ №9:
У меня была точно такая же проблема, когда 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.