簡體   English   中英

如何從 Java 中的 try/catch 塊中拋出異常的點恢復執行?

[英]How do I resume the execution from the point where the exception was thrown in try/catch block in Java?

我的用例要求我檢查 DBConnections 以確保我們擁有正確的 url。

假設我們有 10 個 Oracle DB 的列表,並且 DB4 的連接 url 格式錯誤。 我們想捕獲 db4 連接失敗但仍想檢查列表中所有剩余的數據庫。

allDBs = {DB1{用戶名, url, 通過}, DB2{用戶名, url, 通過}, ....DB10{用戶名, url, 通過}}


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 處被捕獲。 但是如何恢復對列表中剩余數據庫的檢查?

只需for cycle 和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());
 }
}

只需將 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());
        }
                
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM