为什么SQLException没有扩展IOException?

时间:2016-07-06 12:34:12

标签: java exception jdbc

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

为什么不是这样?

4 个答案:

答案 0 :(得分:6)

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

例如,如果编写错误的SQL命令,则会有SQLException

以下是与IO无关的可能SQLExceptions的非详尽列表:

  • 错误的sql语法
  • 错误的属性编号
  • 错误的属性类型
  • 违反约束
  • 特权问题
  • 重复主键
  • 不存在表名或列名

来自javadoc

  

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

错误的SQL或约束违规也会引发SQL异常。

答案 3 :(得分:0)

例如,您可以尝试同时捕获两者

public Massage getLastMassage(String ChatNumber) {
    database.beginTransaction();
    Massage massage = null;
    try {
        String[] args = {ChatNumber};
        //String selectQuery="SELECT * FROM " + MassageDBHelper.DATABASE_NAME + " WHERE PhoneNumber=?";
        //Cursor cursor=database.rawQuery(selectQuery,args);
        Cursor cursor = database.query(MassageDBHelper.DATABASE_NAME, columns, "PhoneNumber=?", args, null, null, null);

        cursor.moveToLast();
        massage = cursorToMassage(cursor);
        cursor.close();


    } catch {
        //Error in between database transaction 
    } finally {
        database.endTransaction();
        return massage;
    }
}