Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么';SQLException扩展了IOException?_Java_Exception_Jdbc - Fatal编程技术网

Java 为什么';SQLException扩展了IOException?

Java 为什么';SQLException扩展了IOException?,java,exception,jdbc,Java,Exception,Jdbc,作为客户机,当我的程序的输入/输出出现“坏”情况时,应该抛出一个I/O异常。现在,当我连接到一个服务器时,我的程序有一个输入输出关系,作为客户端到所述服务器。因此,当通信中的某些内容不起作用时(某些“坏的”),产生的异常应该是IOException,即SQLException应该扩展IOException 为什么不是这样?因为SQLException并不总是与IO相关 例如,如果您编写了一个错误的SQL命令,则会出现SQLException 以下是与IO无关的可能SQLException的非详尽

作为客户机,当我的程序的输入/输出出现“坏”情况时,应该抛出一个I/O异常。现在,当我连接到一个服务器时,我的程序有一个输入输出关系,作为客户端到所述服务器。因此,当通信中的某些内容不起作用时(某些“坏的”),产生的异常应该是IOException,即SQLException应该扩展IOException


为什么不是这样?

因为
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。