Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.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 区分JDBC驱动程序异常和数据库异常_Java_Jdbc_Sqlexception_Error Code - Fatal编程技术网

Java 区分JDBC驱动程序异常和数据库异常

Java 区分JDBC驱动程序异常和数据库异常,java,jdbc,sqlexception,error-code,Java,Jdbc,Sqlexception,Error Code,该条规定如下: 驱动程序和数据库中都可能发生SQLException。什么时候 如果发生此类异常,则将创建SQLException类型的对象 传递给catch子句 同一教程还说明: getSQLState():获取XOPEN SQLstate字符串。对于JDBC驱动程序 错误,此方法未返回任何有用信息。暂时 数据库错误,返回五位XOPEN SQLstate代码。这 方法可以返回null 因此,驱动程序和数据库中可能会发生SQLException 我正在查看forSQLException类和 下面

该条规定如下:

驱动程序和数据库中都可能发生SQLException。什么时候 如果发生此类异常,则将创建SQLException类型的对象 传递给catch子句

同一教程还说明:

getSQLState():获取XOPEN SQLstate字符串。对于JDBC驱动程序 错误,此方法未返回任何有用信息。暂时 数据库错误,返回五位XOPEN SQLstate代码。这 方法可以返回null

因此,驱动程序和数据库中可能会发生SQLException

我正在查看for
SQLException
类和 下面是关于SQLState代码的内容

SQLState代码:这些代码及其各自的含义 由ISO/ANSI和开放组(X/Open)标准化,尽管有些代码 已保留供数据库供应商自行定义。这 字符串对象由五个字母数字字符组成。取回这个 通过调用方法SQLException.getSQLState进行编码

关于错误代码

错误代码:这是一个整数值,用于标识发生的错误 导致引发SQLException实例。它的价值和意义 是特定于实现的,可能是实际的错误代码 由基础数据源返回。通过调用 方法SQLException.getErrorCode

从这两个方面来看,SQLState代码似乎是区分驱动程序和数据库异常的更好的候选者

要区分潜水员异常和数据库异常,是否需要一个catch子句,如下所示:

   catch (SQLException se) 
   {   
       if(se.getSQLState() != null) 
       {
         System.out.println("Exception occured in the database");

         System.out.println("Database's native Error Code:"+se.getErrorCode());

         try
         {
            if(conn.getMetaData().getSQLStateType() == 1)
            {
                System.out.println("Open Group Error Code : "+ se.getSQLState());
            }
            else if(conn.getMetaData().getSQLStateType() == 2) 
            {
                System.out.println("SQL99 Error Code : "+ se.getSQLState());                    
            }
            else
            {
                System.out.println("Database vendor reserved Code : "+ se.getSQLState());                   
            }
         }  
         catch (SQLException e) 
         {
            e.printStackTrace();
         }
       }
       else 
       {
           System.out.println("Exception occured in the databse driver");

           System.out.println("Datasbe Driver Error Code:"+se.getErrorCode());
       }

       // ***  Code for cleaning up database resources would go here ***
   }
似乎驱动程序和数据库中都可能发生SQLException

没有

只有驱动程序才能抛出SQLException。它这样做是为了响应数据库产生的错误。驱动程序的部分功能是将这些映射到SQLExceptions


你应该使用,而不是随意的互联网垃圾。官方教程所说的是“当JDBC在与数据源的交互过程中遇到错误时,它会抛出一个SQLException实例”[我的重点]。

我是基于这个JDBC教程:>我也更新了帖子来反映这一点。你的源代码是错误的。数据库几乎肯定不是用Java编写的,因此根本不能抛出Java异常。请参阅我的编辑:“当JDBC在与数据源的交互过程中遇到错误时,它会抛出一个SQLException实例”。因此,任何SQLException都表明“数据库”出了问题。从应用程序的角度来看,问题是“在驱动程序中”(无论您认为是什么)还是在数据库中并不重要。“对于JDBC驱动程序错误,此方法不会返回有用的信息。”这完全是错误的。sqlcli手册记录了一系列应用于调用级接口(如JDBC)的SQLstate代码,甚至允许供应商和驱动程序定义自己的SQL状态。