此Jdbc tutorial声明如下:
SQLException可以在驱动程序和数据库中发生。什么时候 发生这样的异常时,SQLException类型的对象将是 传递给了catch子句。
同一教程还指出:
getSQLState():获取XOPEN SQLstate字符串。对于JDBC驱动程序 错误,此方法不返回任何有用的信息。为一个 数据库错误,返回五位XOPEN SQLstate代码。这个 方法可以返回null。
因此,似乎SQLException可能出现在驱动程序和数据库中。
我正在查看SQLException
类oracle docs和oracle jdbc tutorial
其中说明了以下关于 SQLState代码
SQLState代码:这些代码及其各自的含义 由ISO / ANSI和Open Group(X / Open)标准化,尽管有些代码 已被保留供数据库供应商自行定义。这个 String对象由五个字母数字字符组成。检索这个 代码通过调用方法SQLException.getSQLState。
以及错误代码
错误代码:这是一个标识错误的整数值 导致抛出SQLException实例。它的价值和意义 是特定于实现的,可能是实际的错误代码 由底层数据源返回。通过调用检索错误 方法SQLException.getErrorCode。
从两者看来,似乎SQLState代码可以更好地区分驱动程序和数据库异常。
要区分Diver异常和数据库异常,请执行以下工作中的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 ***
}
答案 0 :(得分:3)
似乎SQLException可以在驱动程序和数据库中发生。
没有
只有驱动程序才能抛出SQLException。它是为了响应数据库生成的错误。驱动程序的部分功能是将它们映射到SQLExceptions。
您应该使用Oracle JDBC tutorial,而不是任意的互联网垃圾。 官方教程所说的是'当JDBC在与数据源交互时遇到错误时,会抛出SQLException'的实例。 [我的重点]。