Вернуться в заявлении try catch в Java

1

В этом методе, где я могу использовать оператор 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. Любая помощь?

  • 0
    Не внутри, finally блока.
Теги:
try-catch
return
finally

5 ответов

0
Лучший ответ

Я получаю ошибку, поскольку 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}

  • 0
    Я объявил вне блока. Получу ли я исключение в перехвате, если нет адреса электронной почты?
  • 0
    @ user3152748 вы получите Nullpointer, но если вы получите какое-либо исключение, вы можете вернуть null или конкретное сообщение об ошибке в блоке catch. Это ваша ставка !!! :)
0
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;
     }
0

Вам нужно рассмотреть сферу охвата. В вашем коде, когда вы объявляете свой адрес электронной почты внутри блока (блок 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;
 }
0

return может использоваться внутри блока try или внешнего блока try - catch, в finally блок в основном для отказа от ресурсов не для записи операторов возврата.

  • 0
    Нет, это не правда Вы можете ограничить этот try-catch, чтобы обрабатывать только возможные исключения запроса, а затем обрабатывать остальную часть кода (включая операторы return) вне try / catch.
  • 0
    @Handsomeguy Если я вас правильно понял, вы хотите сказать, что нет необходимости писать блок « finally ?
Показать ещё 2 комментария
0

измените свой код на

List<String> emailAddress= new ArrayList<String>();
try
{
....
}

return emailAddress;

Раньше переменная, которую вы пытались вернуть, была ограничена областью блока try.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню