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