java.sql.SQLException:Io exception:Socket read timed out vs Closed Connection

时间:2013-05-21 20:40:24

标签: java sql oracle exception jdbc

我正在尝试研究连接到Oracle DB的以下两个错误的问题:

  1. 已关闭连接
  2. java.sql.SQLException:Io exception:Socket read timed out
  3. 我的理解:

    1. 封闭连接:发生的原因是由于存在某种类型的网络中断或数据库由于某种“不活动”而关闭了会话
    2. java.sql.SQLException:Io异常:套接字读取超时:这是连接成功的情况,但由于某种原因,套接字/数据为空,最终超时,因为没有可用的数据。 / LI>

      是否可以在本地Oracle DB环境中复制上述错误?步骤是什么?

      感谢您抽出宝贵时间作出回应。

      感谢。

2 个答案:

答案 0 :(得分:1)

您对封闭连接的理解是正确的。关闭连接的原因:外部设备(如防火墙,网络设备和远程数据库侦听器)可能会在一段时间不活动后强制关闭网络连接

即使在活动连接上也会发生ReadTimeOut。如果查询或过程花费了大量时间,您将获得超时读取时间。

  
      
  • Closed Connection:在数据库运行时关闭数据库侦听器
  •   
  • ReadTimedOut:在程序中添加睡眠超过10分钟,并从应用程序
  • 调用该过程   

Oracle DB中的Socket读取超时错误复制:

  1. setNetworkTimeout for SQL connection //例如,设置超时为120秒
  2. 从java调用数据库过程并在该过程中睡眠时间超过setNetworkTimeout

    dbms_lock.sleep(125); -- sleeps for 125 seconds
    
  3. 由于125秒睡眠,过程没有在120秒内返回,因此java会在上面的场景中抛出套接字读取时间。

答案 1 :(得分:0)

我刚刚开始使用java.sql。*包,但这是我所理解的。关闭的连接是发生的错误并且DB会话关闭,但是没有完成错误处理,因此它就是它的结束。使用java.SQException,您可以管理此错误(使用throws子句)并将其打印出来或执行其他错误处理方法。

以下是Oracle关于例外以及如何处理它们的链接。

希望这有帮助。

Exceptions in Java.