Как исправить SQLException в Catch Statement? - PullRequest
0 голосов
/ 30 августа 2011

Эта программа об автозаполнении.Когда я что-то набираю в textfield, появляется список предложений.

Я делаю метод onWordUpdated() для списка предложений из БД, когда я набираю что-то в textfield. * 1006.*

Теперь проблема в том, что у меня есть эта ошибка:

exception java.sql.SQLException is never thrown in body of corresponding try statement

Я сделал комментарий в коде, чтобы вы знали, какая строка.

Может кто-нибудь помочь мне, какисправить это?

спасибо ..

У меня есть этот код:

public void onWordUpdated(final String toComplete)
  {
    new Thread(new Runnable()
    {
      public void run()
      {
        try
        {
          final List<Suggestion> suggestions = suggestor.getSuggestions(toComplete);
          SwingUtilities.invokeLater(new Runnable()
          {
            public void run()
            {
              try
              {
                suggestionWidgetModel.clear();
                for (Suggestion suggestion : suggestions)
                  suggestionWidgetModel.addElement(suggestion.getCaption());
                if (!suggestions.isEmpty())
                  suggestionWidget.setSelectedIndex(0);
              }
              catch (SQLException e) // This line is my problem, Could someone help me how to fix this? Thanks.. 
              {
                e.printStackTrace();
              }
            }
          });
        }
        catch (SQLException e1)
        {
          onSqlError(e1);
        }
      }
    }, "onWordUpdated").start();
  }

Ответы [ 2 ]

7 голосов
/ 30 августа 2011

Компилятор просто говорит вам, что вам не нужно перехватывать это исключение в этот момент.

SQLException - проверенное исключение, которое означает, что ваш код должен видеть его, только если вы явно выбросите его или вызовете метод, который объявляет его в предложении throws. Ничто из этого не относится к коду в данном конкретном блоке try / catch.

Вы можете просто избавиться от внутреннего блока try / catch и, возможно, от внешнего.


IIRC, теоретически возможно увидеть проверенные исключения, которые не были объявлены, но это вряд ли произойдет, если вы не предпримете специальные шаги, чтобы это произошло.

7 голосов
/ 30 августа 2011

Java имеет два типа исключений : не проверено (те, которые наследуются от RuntimeException или Error) и проверено (все остальные, которые наследуются от Exception).

Проверенное исключение имеет следующие свойства:

  • Если блок кода выбрасывает единицу, он должен быть перехвачен в блоке перехвата, или метод должен объявить, что он может выдать этот типиз Exception.
  • Если какой-то код вызывает метод, который throws SomeException, этот код также должен быть в try-catch или его метод должен также указывать throws SomeException.

Из-за первых двух проверок компилятор может определить, можно ли на самом деле создать проверенное исключение в определенном блоке кода.В результате это приводит к третьему свойству:

  • Если предложение catch блока try-catch объявляет тип Exception, который не может встречаться в блоке try, тогда ошибка компиляциигенерируется.Компилятор делает это прежде всего, чтобы сообщить вам, что вы допустили ошибку: вы имеете дело с исключением, которое никогда не будет выдано.

SQLException является проверенным исключением, поэтому на него распространяются эти правила.Ни одна из строк кода (или методов, которые они вызывают) в приведенном ниже блоке try не может выдать SQLException, поэтому компилятор сообщает вам об ошибке компиляции.

try {
    suggestionWidgetModel.clear();
    for (Suggestion suggestion : suggestions)
        suggestionWidgetModel.addElement(suggestion.getCaption());
    if (!suggestions.isEmpty())
        suggestionWidget.setSelectedIndex(0);
}
catch (SQLException e) // This line is my problem, Could someone help me how to fix this? Thanks.. 
{
    e.printStackTrace();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...