【问题标题】:handled SQL exception being flagged as unhandled已处理的 SQL 异常被标记为未处理
【发布时间】:2015-11-03 23:00:14
【问题描述】:

好的,这是我的代码片段:

     try 
    {

        res = gfSQL.doSQL("SELECT TIMESTAMP, MSGLEVEL, APPLICATION, STREAM, THREADID, " +
                          " THREADNAME, REQUESTID, MESSAGE, ID, PROCESSED" +
                           " FROM GFLOG where PROCESSED = 'N'" +
                           " ORDER BY TIMESTAMP, ID");
    } catch ( SQLException e) {
        e.printStackTrace();
        System.exit(128);
    }

    if (! res.first()) {  <<<---- FLAGGED STATEMENT
        // no data to process  
        System.err.println("No data found to process\n");
        return;
    }

现在 java 正在使用“未处理的异常类型 SQLException”标记指示语句(以及之后的每个人)。 gfSQL.doSQL 抛出此异常并定义为:

public ResultSet doSQL(String sqlCommand) 抛出 SQLException {

有趣的是——如果我像这样重复“catch”块:

try 
    {

        res = gfSQL.doSQL("SELECT TIMESTAMP, MSGLEVEL, APPLICATION, STREAM, THREADID, " +
                          " THREADNAME, REQUESTID, MESSAGE, ID, PROCESSED" +
                           " FROM GFLOG where PROCESSED = 'N'" +
                           " ORDER BY TIMESTAMP, ID");
    } catch ( SQLException e) {
        e.printStackTrace();
        System.exit(128);
    } catch ( SQLException e) {
        e.printStackTrace();
        System.exit(128);
    }
    if (! res.first()) {
        // no data to process

没有标记“未处理”错误。 (但是,重复的流行语当然被标记为“无法访问的 catch 块 - SQLException 已被处理”。)

知道为什么 Java 在一个实例中看到了问题,而在另一个实例中没有?还是我错过了什么?

【问题讨论】:

    标签: java exception-handling try-catch


    【解决方案1】:

    好吧,gfSQL.doSQL()可以抛出一个 SQLException,而你正在捕捉它。

    但是res.first() 也可以抛出一个 SQLException,而你没有捕捉到它,因为这条指令不在 try 块中。这就是你得到编译器错误的原因。

    【讨论】:

      【解决方案2】:

      res.first() 应该在 try 块中,因为它可以抛出异常:

      try {
          res = // ...
          if(!res.first()) {
              // ...
          }
      } catch ( SQLException e) {
          // ...
      }
      

      【讨论】:

        猜你喜欢
        • 2023-03-25
        • 1970-01-01
        • 2015-01-26
        • 2017-04-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-19
        相关资源
        最近更新 更多