如何从 catch 语句中的 Java 异常对象检索多个 SSMS 查询错误消息?

How do you retrieve multiple SSMS query error messages from a Java Exception object in a catch statement?

我正在开发一个 JSON 异常 HTTP 响应生成器,它基于在 SQL Server Management Studio 中执行 select 查询的错误消息。我有一个 try/catch 块,在 try 中执行了 select 查询,在 catch 中生成了带有异常消息的响应构建。

我的问题是我的异常响应生成器目前只能从失败的 SSMS 查询中捕获第一条错误消息。如果单个查询有超过 1 条错误消息,它将忽略第一个之后的所有内容。我想改进异常响应构建器,以便它 returns 来自同一响应中单个查询执行的每个 SSMS 错误消息。因此,如果我在单元测试中拼错了两个列名,我希望响应给我 'Invalid column name' 消息两次。有谁知道这是否可能?有没有办法遍历 Exception 对象并得到多个错误?不是单个错误的堆栈跟踪,而是 "sys.messages" 错误消息 'text' 来自查询的多个独立错误的值?

我的收获是这样的:

    catch (Exception e) {
        response = myresponse.exceptionResponse(e);
    }

我不确定 Exception 对象是否包含来自单个 SSMS 查询的多个错误消息实例,或者它是否只包含第一个,也许这就是我的异常响应构建器仅 returns 的原因一条错误消息。另外,构建我的异常响应的代码如下所示:

 public MyResponse exceptionResponse(Exception exception){
    JsonObjectBuilder response = Json.createObjectBuilder();
    if (exception != null) {
        msg = exception.getMessage();
        if (msg == null) {
         msg = NULL_EXCEPTION;
     }
 }
 response.add("response", msg);
 response.add("id",Integer.toString(counter++));
 isError = true;
 responseArray.add(response);
 return this;

}`

如果有一种方法可以遍历 Exceptions,就像 SQLExceptions 一样,我绝对可以这样做,但是我找不到关于遍历 Exception 对象的任何信息。任何建议将不胜感激!

如果您拼错了两个列名,SQL 服务器将 return 只有一条消息包含第一个拼写错误的列名。我相信不可能捕获所有发生的错误,因为在任何给定时间只发生一个错误。 SQL 如果服务器确定您的查询有问题,它不会继续尝试继续执行查询。