2013-02-19 79 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