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 3

jTDS 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 挂起的主要内容,如果未能解决你的问题,请参考以下文章

使用存储过程的 s-s-rS 报告

s-s-rS 2008 报告无法使用存储过程

使用 s-s-rS 2016 的自定义身份验证(安全扩展)

如何使用 SSIS 运行 s-s-rS 报告?

Vue s-s-r serverPrefetch 使用 this.$s-s-rContext.res.redirect 重定向服务器

使用存储过程在 s-s-rS 中传递多个字符串值