Driver.getConnection 使用 SQLServer 驱动程序和 Java 1.6.0_29 挂起
Posted
技术标签:
【中文标题】Driver.getConnection 使用 SQLServer 驱动程序和 Java 1.6.0_29 挂起【英文标题】:Driver.getConnection hangs using SQLServer driver and Java 1.6.0_29 【发布时间】:2011-12-12 02:06:44 【问题描述】:我不知道在哪里写关于这个的东西,所以决定在这里写。
经过很长时间调试我的程序后,我发现调用 Driver.getConnection(string, 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
最好的问候,
瑞
【问题讨论】:
这里有同样的问题。 Windows 7 x64,JDK 1.6.0_29,SQL Express 2008 R2 (10.50.1790),使用 sqljdbc4.jar,它挂在 getConnection 上。虽然它对我来说与 1.6.0_24 一起工作/工作得很好(我还没有尝试过其他版本,只有这两个。) 使用 SQL Server 2008R2 复制。 SQL 2005 & 2008 工作正常。 问题在 1.6.0.30 中解决 是的,1.6.0_29 也有同样的问题,我在 1.6.0_33 中验证了修复。 【参考方案1】:我遇到了完全相同的问题,即 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 & jTDS JDBC driver broken after update to 1.6.0_29,它非常相似,但原因不同。有趣的是,它同时出现在 MS 驱动程序和 jtds 驱动程序上。
【讨论】:
【参考方案2】:升级到 1.6.0_30 也对我有用。 Microsoft 已发布 a statement 宣布在 2012 年第一季度进行修复。看起来这是一个 Java 漏洞(BEAST)。
【讨论】:
【参考方案3】:这里同样的问题(SQLJDBC4、MsSQL 2008 R2、JDK1.6.0.29),但是更新到1.6.0.30之后问题就解决了……
所以应该是1.6.0.29的DriverManager的一个严重bug
【讨论】:
【参考方案4】:作为一个仅供参考,在 1.6 系列中似乎有一个新的步骤 build #30 可以解决该问题: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7103725
【讨论】:
【参考方案5】:转载: 组合出现问题
SQL 驱动程序 2.0 SQL 驱动程序 3.0 SQL 驱动程序 4.0 CTP 3jTDS SQL 驱动程序 1.2.5
SQL 服务器 2008R2
Java 1.6.0_29
更改 SQL Server 版本(在 2005 和 2008 年测试)或 Java 版本(1.6.0_27、1.7.0_1),问题不再出现。
客户端/服务器操作系统:Windows 2008R2
已添加到 Java Bug Database 并由 Oracle 处理。
在Microsoft MSDN Data Access Forum(接受的答案:升级到java 7)和Oracle Java JDBC Forums(此处添加的信息,也添加到Java Bug 数据库中)交叉发布。
【讨论】:
【参考方案6】:在此处查看解决方案 https://forums.oracle.com/forums/thread.jspa?messageID=9954398&tstart=0 http://social.msdn.microsoft.com/Forums/en/sqldataaccess/thread/97dce8fd-6487-4bca-80b0-492167db3e0d
“显然,这与 SSL 的使用有关,可以通过将 jre/lib 中的 jsse.jar 替换为早期版本(例如 1.6.0_27 版本)中的 jsse.jar 来缓解。我一直很困惑1.6.0_29 使用 MS JDBC 和较旧的 SQL Server '05 设置,它们不进行安全连接。所有较新的服务器 (SQL Server '08 R2) 都失败,因为它们需要 SSL,Java 1.6.0_29 不能使用 jTDS 或 MS JDBC在这种情况下。”
【讨论】:
【参考方案7】:我很高兴找到这个论坛。我在升级时遇到了同样的问题(我实际上是从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生产版本推荐)。
【讨论】:
【参考方案8】:我也有同样的挂起问题,而且只有 java 1.6.0_29。我注意到如果我升级到 7.1,问题就会消失
【讨论】:
【参考方案9】:我遇到了完全相同的行为:
我在我的 Windows 7 64 位 PC 上同时使用 Oracle XE 和 MS SQL Server Express - 我从 1.6.0_27(x64 版本)升级到 java 1.6.0_29,并惊讶地发现相同的程序能够连接到Oracle XE 但不适用于 MS SQL Server...
我将问题追溯到javax.sql.DataSource.getConnection()
,它一直挂在那里 - 因为这只是一个接口,jdbc 驱动程序引起了我的怀疑......
我正在使用 MS SQL Server JDBC 驱动程序 3.0.1301.202,我什至更新到 SQL Server CTP(“社区技术预览”)4.0.1722.1,因为我怀疑它必须与 jdbc 驱动程序有关 -但没有成功:仍然挂起!
我的解决方法是降级到 1.6.0_27 并且 -- 砰:一切又好了!
最好的问候 埃里希
【讨论】:
我还添加了关于 Java 错误数据库的错误报告。但自从甲骨文接手后,这几乎行不通。我没有收到 Oracle 的任何回复,目前我也找不到其他错误... 那么,究竟如何在 OSX Lion 上将 java 降级到 1.6.0_xx?以上是关于Driver.getConnection 使用 SQLServer 驱动程序和 Java 1.6.0_29 挂起的主要内容,如果未能解决你的问题,请参考以下文章
Vue s-s-r serverPrefetch 使用 this.$s-s-rContext.res.redirect 重定向服务器