2013-05-21 148 views
6

我想研究连接到Oracle DB的以下两个错误此问题:值java.sql.SQLException:IO异常:套接字读取超时VS关闭连接

  1. 关闭连接
  2. java.sql.SQLException:木卫一例外:套接字读取超时

我的理解:

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

是否有可能在本地Oracle数据库环境中复制上述错误?步骤是什么?

我很感激你花时间回复。

谢谢。

回答

0

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

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

希望这会有所帮助。

Exceptions in Java.

+0

感谢您的意见。对于封闭连接错误,我试图弄清楚数据库关闭连接和网络干扰之间是否存在差异,无论这两者是否提供相同的错误或是否存在区别。另外,我都认为这两个例外都是正确的'java.sql.SQLRecoverableException:Closed Connection'还有什么关于Socket超时的例外,它是什么原因导致它像“网络”中断。 – kart0624

+0

@ kart0624我不确定。尝试记录错误代码以查看它们是否不同。很明显,他们出于不同的原因,但他们可能会或可能不会使用相同的错误代码。如果你不熟悉java,这里有一些关于登录java的信息。 [链接](http://www.vogella.com/articles/Logging/article.html) –

1

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

即使在活动连接上,ReadTimeOut也会发生。如果一个查询或过程花费很多时间,您将会看到超时异常。

  • 关闭连接:关机时运行数据库
  • ReadTimedOut数据库监听:从应用的Socket

复制的过程添加的睡眠时间超过10分钟,并调用该程序Oracle DB env中的读超时错误:

  1. setNetworkTimeout为SQL connection //例如起见,设置超时作为120秒
  2. 呼叫从java和睡眠数据库程序在程序时间超过setNetworkTimeout

    dbms_lock.sleep(125); -- sleeps for 125 seconds 
    

由于程序没有返回由于睡眠时间为125秒,java会在120秒内抛出套接字读取超时。

相关问题