java - 何时使用 JDBC 对连接、语句和结果集调用 getWarnings()?

标签 java sql database jdbc warnings

在 JDBC 中,ConnectionStatementResultSet 类型都有一个 getWarnings() 方法,即指定产生与该类型对象关联的第一个警告。第二个和后续警告(如果存在)将链接到第一个警告(如果 甚至存在,如果没有警告则生成 null)。

规范说,与这些类型的对象关联的警告在执行某些操作后会被清除。例如,当读取每个新行时,ResultSet 上的警告将被清除。

SQLWarning 类型是 SQLException 的子类型。那么警告的存在是否会由异常指示?如果异常的运行时类型是 SQLWarning,那么该异常将被链接到关联的对象?

我想知道的是,它可能是特定于驱动程序的,我怎么知道什么时候应该调用 getWarnings() 并期望一个非 null response? 换句话说,警告是否存在于 JDBC 对象上并且仅在该对象引发异常后才可用于 getWarnings()? (那个异常(exception)是警告?)

如果我的目标是观察每个警告,我是否应该在每次 JDBC 操作后调用 getWarnings() 来查找警告“只是为了确定”?

最佳答案

SQLWarning 对象是 SQLException 的子类,用于处理数据库访问警告。

警告不会像异常那样停止应用程序的执行;他们只是提醒用户某些事情没有按计划发生。

可以在Connection对象、Statement对象(包括PreparedStatementCallableStatement对象)上报警告), 或 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/

相关文章:

sql - unix_timestamp (MySQL) 的数据类型是什么?

mysql - 使用可重复读取隔离时 SELECT .. FOR UPDATE 有什么用?

sql - SQL 查询中的参数化表名

python - Django 应用程序 View - 如何从 url 中的 django 数据库获取条目并从数据库获取 View 的更多信息?

sql - 连接表 : Only (! ) 添加缺失的行

java - Java 中 for 循环的问题

java - 在 Jooq 中插入多行会引发编译错误

java - 为 Jpanel 制作图形,但属于不同的类

java - 安卓工作室 : Specify location of gradle or android eclipse project

mysql - 数据库中存储重复数据的正确方法