处理错误

下载 JDBC 驱动程序

使用 Microsoft JDBC Driver for SQL Server 时,所有数据库错误条件都作为异常通过 SQLServerException 类返回到 Java 应用程序。 SQLServerException 类的以下方法继承自 java.sql.SQLException 和 java.lang.Throwable;并且可用于返回有关出现的 SQL Server 错误的特定信息:

  • getSQLState() 返回异常的标准 X/Open 或 SQL99 状态代码。

  • getErrorCode() 返回特定的数据库错误号。

  • getMessage() 返回异常的完整文本。 错误消息文本对问题加以说明,并且经常包括可提供信息的占位符,如对象名称,在显示时,这些占位符会插入到错误消息中。

  • getSQLServerError() 返回 SQLServerError 对象,该对象包含有关从 SQL Server 接收的异常的详细信息。 如果未发生服务器错误,则此方法返回 null。

SQLServerError 类的以下方法可用于获取有关服务器生成的错误的更多详细信息。

  • SQLServerError.getErrorMessage() 返回从服务器接收的错误消息。

  • SQLServerError.getErrorNumber() 返回一个标识错误类型的数字。

  • SQLServerError.getErrorState() 从 SQL Server 返回表示错误、警告或“找不到数据”消息的数字错误代码。

  • SQLServerError.getErrorSeverity() 返回收到的错误的严重性级别。

  • SQLServerError.getServerName() 返回运行生成错误的 SQL Server 实例的计算机的名称。

  • SQLServerError.getProcedureName() 返回生成错误的存储过程或远程过程调用 (RPC) 的名称。

  • SQLServerError.getLineNumber() 从生成错误的 Transact-SQL 批命令或存储过程中返回行号。

在下一个示例中,将向函数中传递 SQL Server AdventureWorks2022 示例数据库的一个开放式连接,并构造一条没有 FROM 子句、格式错误的 SQL 语句。 然后运行该语句并处理 SQL 异常。

public static void executeSQLException(Connection con) {
    try (Statement stmt = con.createStatement();) {
        String SQL = "SELECT TOP 10 * Person.Contact";
        ResultSet rs = stmt.executeQuery(SQL);

        while (rs.next()) {
            System.out.println(rs.getString("FirstName") + " " + rs.getString("LastName"));
        }
    }
    catch (SQLException se) {
        do {
            System.out.println("SQL STATE: " + se.getSQLState());
            System.out.println("ERROR CODE: " + se.getErrorCode());
            System.out.println("MESSAGE: " + se.getMessage());
            System.out.println();
        }
        while (se != null);
    }
}

另请参阅

诊断 JDBC 驱动程序问题