В этом методе, где я могу использовать оператор return? В конце концов? или попробовать?
Я немного смущен, чтобы вернуть строку внутри команд try catch.
Вот мой код.
public List<String> getEmailAddr(String strAccountnbr, String strCode) throws Exception {
String strQuery2 = null;
ResultSet rs = null;
PreparedStatement ps = null;
try
{
List<String> emailAddress= new ArrayList<String>();
strQuery2 = "SELECT c.EmailAddress AS EmailAddress" +
" FROM customeremailid c " +
"WHERE c.AccountNbr = ? " +
"AND c.Code = ? ";
logMsg("strQuery2: "+strQuery2);
ps = getDBConn().prepareStatement(strQuery2);
ps.setString(1, strAccountnbr);
ps.setString(2, strCode);
rs = ps.executeQuery();
while(rs.next())
{
emailAddress.add((rs.getString("EmailAddress")));
}
}
catch(Exception e)
{
e.printStackTrace();
}
return emailAddress;
}
Я получаю ошибку, поскольку emailAddress cannot resolved to a variable.
Любая помощь?
Я получаю ошибку, поскольку
emailAddress
не может быть разрешен к переменной. Любая помощь?
List<String> emailAddress= new ArrayList<String>();//Declare it outside the block
try{...
ИЛИ Объявлять снаружи, но инициализировать внутри, try
сделать его доступным в блоке catch
.
List<String> emailAddress=null;
try{...
emailAddress= new ArrayList<String>();//Initialize it inside the block
Прямо сейчас ваш emailAddress
доступен только в try{//Block}
но не в catch{//Block}
public List<String> getEmailAddr(String strAccountnbr, String strCode) throws Exception {
String strQuery2 = null;
ResultSet rs = null;
PreparedStatement ps = null;
List<String> emailAddress= new ArrayList<String>();
try{
strQuery2 = "SELECT c.EmailAddress AS EmailAddress" +
" FROM customeremailid c " +
" WHERE c.AccountNbr = ? " +
" AND c.Code = ? ";
logMsg("strQuery2: "+strQuery2);
ps = getDBConn().prepareStatement(strQuery2);
ps.setString(1, strAccountnbr);
ps.setString(2, strCode);
rs = ps.executeQuery();
while(rs.next())
{
emailAddress.add((rs.getString("EmailAddress")));
}
}
catch(Exception e)
{
//some error especify your exception or uses a generic..
throw new EmailAdressException("BLA BLA BLA...")
}
//if everything is fine return email
return emailAddress;
}
Вам нужно рассмотреть сферу охвата. В вашем коде, когда вы объявляете свой адрес электронной почты внутри блока (блок try), адрес электронной почты доступен только внутри этого блока. Трюк здесь полезен только для обработки возможных исключений при выполнении запроса. Попытайтесь ограничить try-catch только кодом, который будет генерировать исключение (в этом случае вы могли/должны реорганизовать ваш код, чтобы запрос выполнялся по собственному методу).
Если вы объявите emailAddress за пределами блока try-catch, вы вернете его после блока catch.
public List<String> getEmailAddr(String strAccountnbr, String strCode) throws Exception {
List<String> emailAddress= new ArrayList<String>();
try {
// Handle query here
} catch(Exception e) {
// You should not catch Exception, but a more fine-grained exception.
// In this case, SQLException
}
return emailAddress;
}
return
может использоваться внутри блока try
или внешнего блока try - catch
, в finally
блок в основном для отказа от ресурсов не для записи операторов возврата.
finally
?
измените свой код на
List<String> emailAddress= new ArrayList<String>();
try
{
....
}
return emailAddress;
Раньше переменная, которую вы пытались вернуть, была ограничена областью блока try.
finally
блока.