在Java中,如何从try/catch块中抛出异常的位置恢复执行?

在Java中,如何从try/catch块中抛出异常的位置恢复执行?,java,exception,try-catch,sqlexception,Java,Exception,Try Catch,Sqlexception,我的用例要求我检查数据库连接,以确保我们有正确的url 假设我们有10个Oracle数据库的列表,并且DB4的连接url格式不正确。我们希望捕获db4连接已失败,但仍希望检查列表中所有剩余的DBs allDBs={DB1{username,url,pass},DB2{username,url,pass},….DB10{username,url,pass} DBList allDBs=newdblist(); 试一试{ 用于(数据库详细信息数据库:所有数据库) { dbUrl=db.getDbU

我的用例要求我检查数据库连接,以确保我们有正确的url

假设我们有10个Oracle数据库的列表,并且DB4的连接url格式不正确。我们希望捕获db4连接已失败,但仍希望检查列表中所有剩余的DBs

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


DBList allDBs=newdblist();
试一试{
用于(数据库详细信息数据库:所有数据库)
{
dbUrl=db.getDbUrl();
dbUsername=db.getUserName();
dbPassword=db.getPass();
DbDetails DbDetails=新的DbDetails(dbUrl、dbUsername、dbPassword);
dataSource=dbConfig.setOrclDataSource(dbDetails);
conn=dataSource.getConnection();
String selectQuery=“从双重中选择1”;
SqlFunction sf=新的SqlFunction(数据源,选择查询);
sf.compile()
}
}
捕获(SQLSE异常){
connFailDBList.add(dbDetail);
LOG.error(se.getMessage());
}

因为db4url的格式不正确。使用上述逻辑,SQLException在DB4处被捕获。但是如何继续检查列表中剩余的数据库呢?

只需将
切换为
循环,然后
尝试catch

DBList allDBs=newdblist();
用于(数据库详细信息数据库:所有数据库){
试一试{
//在此处检查连接
}捕获(SQLSE异常){
connFailDBList.add(dbDetail);
LOG.error(se.getMessage());
}
}

只需将
换成
循环,然后
尝试捕捉

DBList allDBs=newdblist();
用于(数据库详细信息数据库:所有数据库){
试一试{
//在此处检查连接
}捕获(SQLSE异常){
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());
        }
                
    }
DBList allDBs=new DBList();
用于(数据库详细信息数据库:所有数据库){
试一试{
dbUrl=db.getDbUrl();
dbUsername=db.getUserName();
dbPassword=db.getPass();
DbDetails DbDetails=新的DbDetails(dbUrl、dbUsername、dbPassword);
dataSource=dbConfig.setOrclDataSource(dbDetails);
conn=dataSource.getConnection();
String selectQuery=“从双重中选择1”;
SqlFunction sf=新的SqlFunction(数据源,选择查询);
sf.compile()
}捕获(SQLSE异常){
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());
        }
                
    }
DBList allDBs=new DBList();
用于(数据库详细信息数据库:所有数据库){
试一试{
dbUrl=db.getDbUrl();
dbUsername=db.getUserName();
dbPassword=db.getPass();
DbDetails DbDetails=新的DbDetails(dbUrl、dbUsername、dbPassword);
dataSource=dbConfig.setOrclDataSource(dbDetails);
conn=dataSource.getConnection();
String selectQuery=“从双重中选择1”;
SqlFunction sf=新的SqlFunction(数据源,选择查询);
sf.compile()
}捕获(SQLSE异常){
connFailDBList.add(dbDetail);
LOG.error(se.getMessage());
}
}