【问题标题】:How do I resume the execution from the point where the exception was thrown in try/catch block in Java?如何从 Java 的 try/catch 块中抛出异常的点恢复执行?
【发布时间】:2020-11-12 17:54:59
【问题描述】:

我的用例要求我检查 DBConnections 以确保我们拥有正确的 url。

假设我们有 10 个 Oracle DB 的列表,并且 DB4 的连接 url 格式错误。我们想捕获 db4 连接失败但仍想检查列表中所有剩余的 DB。

allDBs = {DB1{username, url, pass}, DB2{username, url, pass}, ....DB10{username, url, pass}}


DBList <DbDetails> allDBs = new DBList <DbDetails>();
try{
 for(DbDetails db : allDBs)
 {
            dbUrl = db.getDbUrl();
            dbUsername = db.getUserName();
            dbPassword = db.getPass();
            DbDetails dbDetails = new DbDetails(dbUrl, dbUsername, dbPassword);

            dataSource = dbConfig.setOrclDataSource(dbDetails);
            conn = dataSource.getConnection();
            String selectQuery = "select 1 from dual";
            SqlFunction sf = new SqlFunction(dataSource, selectQuery);
            sf.compile()
   }
}
catch(SQLException se){
 connFailDBList.add(dbDetail);
 LOG.error(se.getMessage());
}

由于 DB4 url​​ 格式错误。通过上述逻辑,SQLException 在 DB4 中被捕获。但是如何恢复对列表中剩余数据库的检查?

【问题讨论】:

    标签: java exception try-catch sqlexception


    【解决方案1】:

    只需交换for 循环和try-catch

    DBList <DbDetails> allDBs = new DBList <DbDetails>();
    for(DbDetails db : allDBs){
     try{
       //  checking connectivity here
     }catch(SQLException se){
       connFailDBList.add(dbDetail);
       LOG.error(se.getMessage());
     }
    }
    

    【讨论】:

      【解决方案2】:

      只需将 try/catch 块移动到 for 循环中即可。

      DBList<DbDetails> allDBs = new DBList<DbDetails>();
      
          for (DbDetails db : allDBs) {
              try {
                  dbUrl = db.getDbUrl();
                  dbUsername = db.getUserName();
                  dbPassword = db.getPass();
                  DbDetails dbDetails = new DbDetails(dbUrl, dbUsername, dbPassword);
      
                  dataSource = dbConfig.setOrclDataSource(dbDetails);
                  conn = dataSource.getConnection();
                  String selectQuery = "select 1 from dual";
                  SqlFunction sf = new SqlFunction(dataSource, selectQuery);
                  sf.compile()
              } catch (SQLException se) {
                  connFailDBList.add(dbDetail);
                  LOG.error(se.getMessage());
              }
                      
          }
      

      【讨论】:

        猜你喜欢
        • 2020-12-16
        • 1970-01-01
        • 2011-03-18
        • 1970-01-01
        • 2012-02-20
        • 2021-11-17
        • 1970-01-01
        • 2017-10-03
        • 1970-01-01
        相关资源
        最近更新 更多