2013-02-19 58 views
2

在我的应用程序中,我使用Spring和JdbcDAOSupport通过TCP/IP连接到MSSQL数据库。当连接稳定时它工作正常,但当我在遍历结果集的同时拔下以太网电缆时,应用程序将挂起。它不会抛出任何例外。JDBC迭代时丢失连接ResultSet

JdbcTemplate jdbc = getJdbcTemplate(); 
return jdbc.query(sql, mapper, someArgs); 

其中映射器是我自己的RowMapper类。我尝试过使用Connection和PreparedStatement,但它不能解决问题。有没有人有任何解决方案或有类似的问题?

回答

3

应用程序挂起,因为TCP/IP的设计考虑到连接不好。当一个数据包没有到达目的地时,发送者只需重试一次指数回退。如果此行为不可取,请配置套接字阻塞超时(SO_TIMEOUT)。

不幸的是,SQL Server的JDBC驱动程序没有配置套接字超时选项,所以它会无限期地阻塞。

弥敦道休斯表示他的意见时,jTDS driver确实有配置了socketTimeout一个选项,让你可以试试驱动程序。

+1

也许尝试jtds?看起来像它有一个套接字超时(http://jtds.sourceforge.net/faq.html) – 2013-02-19 17:05:22

+1

@NathanHughes这可能是唯一的选择,是的 – 2013-02-19 17:12:54

+0

@NathanHughes我试了loginTimeout,仍然没有 – 2013-02-19 17:42:22