作为客户端,当我的程序的输入/输出发生“不好”事件时,应抛出I/O异常。现在,当我连接到服务器时,我的程序作为客户端与上述服务器之间具有输入输出关系。因此,如果通信上的某些内容不起作用(某些“不好”),则产生的异常应该是IOException,即SQLException应该扩展IOException。为什么SQLException不会扩展IOException?
为什么不是这样?
作为客户端,当我的程序的输入/输出发生“不好”事件时,应抛出I/O异常。现在,当我连接到服务器时,我的程序作为客户端与上述服务器之间具有输入输出关系。因此,如果通信上的某些内容不起作用(某些“不好”),则产生的异常应该是IOException,即SQLException应该扩展IOException。为什么SQLException不会扩展IOException?
为什么不是这样?
因为SQLException
并不总是与IO相关。
例如,如果你编写了一个错误的SQL命令,你将有一个SQLException
。
这里是不相关的IO可能的SQLException的非详尽列表:
从javadoc:
提供关于数据库访问错误或其他错误信息的异常。
因此,要做到最准确,我们需要多重继承来指示异常是否是SQL异常和I/O异常,但是我们不能用Java来实现,对吧? – GreenThor
驱动程序是隐藏在客户端(Java应用程序)和服务器之间的通信中发生的事情的驱动程序。 IOException可能会在较低级别引发,但会被拦截并更改为SQLException。 –
SQL异常不一定是IO异常(例如连接丢失,读取超时等)。
错误的SQL或违反约束条件也会引发SQL异常。
是什么让你认为任何SQL相关的问题都与IO问题有关? – GhostCat
为什么“语法错误”是IOException? –