Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: SQLException мешает возвращать ResultSet.  (Прочитано 6359 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Vantuz-Subhuman
Участник

ru
Offline Offline
Пол: Мужской

« : 09-06-2010 12:04 » 

Здравствуйте ещё раз.
Всем общением с базой данных занимается отдельный класс, возвращающий полученные результаты.
Для получения данных из БД был написан вот такой метод:

Код:
public ResultSet getData()
{
    try
    {
        Statement stmt = connection.createStatement();
        ResultSet rs = stmt.executeQuery("SQL-код");
        stmt.close();
        return rs;
    }
    catch(SQLException e)
    {
        return null;
    }
}

При вызове этого метода в другом классе:

Код:
DB db = new DB("test");
ResultSet rs = db.getData();

Джава снова требует обработать SQLException.

Как сделать так, чтобы подобные исключения не вылезали за пределы работающих с ними классов? И как возвращать ResultSet, если его невозможно создать за пределами try/catch дерева?

P.S. Уже была идея перекладывать все данные из ResultSet'а в ArrayList<Object[]> и возвращать его, но это добавляет возни. Возможно есть шанс решить вопрос на уровне исключений.
Записан

«You should never underestimate the predictability of stupidity»,
«Never attribute to malice that which can be adequately explained by stupidity»
Falsehood
Молодой специалист

ru
Offline Offline
Пол: Женский
не может быть


« Ответ #1 : 10-06-2010 12:07 » 

здравствуйте.

во-первых, stmt.close(); правильнее было бы вызывать в блоке finaly, а не в try, т.к. исключение может произойти раньше (в строке ResultSet rs = stmt.executeQuery("SQL-код")Ага, и выражение stmt не закроется.

во-вторых, в какой именно строке в другом методе компилятор требует обработать исключение SQLException? метод getData() не содержит в заголовке декларации того, что он может это исключение генерировать, поэтому требование обработать SQLException относится к другой строке метода.
Записан

Славная трава...
Vantuz-Subhuman
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 10-06-2010 15:15 » new

Спасибо за ответ.
За прошедшее время я немного разобрался в своей оплошности. SQLException вываливается не при вызове написанного мной метода getData(), а при вызове методов полученного из него ResultSeta'а:

Код:
DB db = new DB("test");
ResultSet rs = db.getData();

while(rs.next())
{

}

Вот rs.next() подчёркивается и требует обработки исключительной ситуации. Но, как я понял, это особенности типа ResultSet и их никак не избежать, так что скорее всего прибегну к способу с перекладыванием данных в ArrayList<Object[]>.

Спасибо за замечание о закрытии объекта Statement, собираюсь РТФМ о блоке finally, т.к. раньше его не пользовал.
Записан

«You should never underestimate the predictability of stupidity»,
«Never attribute to malice that which can be adequately explained by stupidity»
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines