2016-07-06 89 views
0

作为客户端,当我的程序的输入/输出发生“不好”事件时,应抛出I/O异常。现在,当我连接到服务器时,我的程序作为客户端与上述服务器之间具有输入输出关系。因此,如果通信上的某些内容不起作用(某些“不好”),则产生的异常应该是IOException,即SQLException应该扩展IOException。为什么SQLException不会扩展IOException?

为什么不是这样?

+2

是什么让你认为任何SQL相关的问题都与IO问题有关? – GhostCat

+1

为什么“语法错误”是IOException? –

回答

6

因为SQLException并不总是与IO相关。

例如,如果你编写了一个错误的SQL命令,你将有一个SQLException

这里是不相关的IO可能的SQLException的非详尽列表:

  • 不良的SQL语法
  • 错误的属性数字
  • 错误的属性类型
  • 约束冲突
  • 权限问题
  • 重复主键
  • 不存在表或列名

javadoc

提供关于数据库访问错误或其他错误信息的异常。

+0

因此,要做到最准确,我们需要多重继承来指示异常是否是SQL异常和I/O异常,但是我们不能用Java来实现,对吧? – GreenThor

+0

驱动程序是隐藏在客户端(Java应用程序)和服务器之间的通信中发生的事情的驱动程序。 IOException可能会在较低级别引发,但会被拦截并更改为SQLException。 –

0

SQL异常不一定是IO异常(例如连接丢失,读取超时等)。

错误的SQL或违反约束条件也会引发SQL异常。

1

因为SQLException不一定是IOException。它可能是错误的语法,格式,... IOException意图由I/O设备(最初的流,如文件和网络操作)返回,而不一定是程序的任何输入/输出。

+0

“如文件和网络操作”是不是服务器访问一个网络操作? – GreenThor

+1

不一定。你可能有嵌入式数据库,语法错误等。在这种情况下,IO本身没有任何问题。 IOException实际上意味着处理设备/环境而不是应用程序异常。如果网络坏了,驱动程序可能会抛出IOException – gusto2

相关问题