在Java中,如何从try/catch块中抛出异常的位置恢复执行?
我的用例要求我检查数据库连接,以确保我们有正确的url 假设我们有10个Oracle数据库的列表,并且DB4的连接url格式不正确。我们希望捕获db4连接已失败,但仍希望检查列表中所有剩余的DBs allDBs={DB1{username,url,pass},DB2{username,url,pass},….DB10{username,url,pass}在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
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());
}
}