Java 为什么';SQLException扩展了IOException?
作为客户机,当我的程序的输入/输出出现“坏”情况时,应该抛出一个I/O异常。现在,当我连接到一个服务器时,我的程序有一个输入输出关系,作为客户端到所述服务器。因此,当通信中的某些内容不起作用时(某些“坏的”),产生的异常应该是IOException,即SQLException应该扩展IOExceptionJava 为什么';SQLException扩展了IOException?,java,exception,jdbc,Java,Exception,Jdbc,作为客户机,当我的程序的输入/输出出现“坏”情况时,应该抛出一个I/O异常。现在,当我连接到一个服务器时,我的程序有一个输入输出关系,作为客户端到所述服务器。因此,当通信中的某些内容不起作用时(某些“坏的”),产生的异常应该是IOException,即SQLException应该扩展IOException 为什么不是这样?因为SQLException并不总是与IO相关 例如,如果您编写了一个错误的SQL命令,则会出现SQLException 以下是与IO无关的可能SQLException的非详尽
为什么不是这样?因为
SQLException
并不总是与IO相关
例如,如果您编写了一个错误的SQL命令,则会出现SQLException
以下是与IO无关的可能SQLException的非详尽列表:
- 糟糕的sql语法
- 错误的属性号
- 错误的属性类型
- 违反约束
- 特权问题
- 重复主键
- 不存在表名或列名
SQL异常不一定是IO异常(例如连接丢失、读取超时等)
错误的SQL或约束冲突也会引发SQL异常。因为SQLException不一定是IOException。它可能是错误的语法,格式。。。IOException是由I/O设备(最初是流,如文件和网络操作)返回的,不一定是程序的任何输入/输出 你可以试着抓住两个,比如说
try
{.. some code..}
Catch (IOException ex)
{... handle IOException (say - wait a minute and try again 10 times)...}
Catch (SqlClientException ex)
{... handle SQL errors Exception (log in a custom table) ...}
Catch (Exception ex)
{... log all other Exception ...}
什么使您认为任何与SQL相关的问题都与IO问题有关?为什么“语法错误”应该是IOException?“例如文件和网络操作”服务器访问不是网络操作吗?不一定。您可能有嵌入式数据库、语法错误等。在这种情况下,IO本身没有问题。IOException实际上是用来处理设备/环境,而不是应用程序异常。如果网络中断,驱动程序可能会抛出一个IOException,但要做到最准确,我们需要多重继承来指示异常是否同时是SQL异常和I/O异常,但Java无法做到这一点,对吗?驱动程序隐藏了客户端(Java应用程序)和服务器之间通信中发生的情况。IOException可能在较低的级别抛出,但它被截获并更改为SQLException。