在 JDBC 中,Connection
、Statement
和 ResultSet
类型都有一个 getWarnings()
方法,即指定产生与该类型对象关联的第一个警告。第二个和后续警告(如果存在)将链接到第一个警告(如果 它 甚至存在,如果没有警告则生成 null
)。
规范说,与这些类型的对象关联的警告在执行某些操作后会被清除。例如,当读取每个新行时,ResultSet
上的警告将被清除。
SQLWarning
类型是 SQLException
的子类型。那么警告的存在是否会由异常指示?如果异常的运行时类型是 SQLWarning
,那么该异常将被链接到关联的对象?
我想知道的是,它可能是特定于驱动程序的,我怎么知道什么时候应该调用 getWarnings()
并期望一个非 null
response? 换句话说,警告是否存在于 JDBC 对象上并且仅在该对象引发异常后才可用于 getWarnings()
? (那个异常(exception)是警告?)
如果我的目标是观察每个警告,我是否应该在每次 JDBC 操作后调用 getWarnings()
来查找警告“只是为了确定”?
最佳答案
SQLWarning
对象是 SQLException
的子类,用于处理数据库访问警告。
警告不会像异常那样停止应用程序的执行;他们只是提醒用户某些事情没有按计划发生。
可以在Connection
对象、Statement
对象(包括PreparedStatement
和CallableStatement
对象)上报警告), 或 ResultSet
对象。
这些类中的每一个都有一个 getWarnings
方法,您必须调用该方法才能看到调用对象上报告的第一个警告:
SQLWarning warning = stmt.getWarnings();
if (warning != null)
{
System.out.println(\"n---Warning---n\");
while (warning != null)
{
System.out.println(\"Message: \" + warning.getMessage());
System.out.println(\"SQLState: \" + warning.getSQLState());
System.out.print(\"Vendor error code: \");
System.out.println(warning.getErrorCode());
System.out.println(\"\");
warning = warning.getNextWarning();
}
}
关于java - 何时使用 JDBC 对连接、语句和结果集调用 getWarnings()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6434338/