如何解决如何从Java的try / catch块中引发异常的那一刻起恢复执行?
我的用例要求我检查DBConnections以确保我们具有正确的URL。
说我们有10个Oracle DB的列表,并且DB4的连接URL格式错误。我们想捕获db4连接失败,但仍然要检查列表中所有剩余的DB。
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网址格式错误。通过上述逻辑,sqlException被捕获到DB4。但是如何恢复列表中其余DB的检查?
解决方法
只需交换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());
}
}
,
只需将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());
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。