Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > как обработать сообщение от oracle?


Автор: Swatch 13.1.2009, 09:18
добрый день.

в оракле написана процедурка, которая копирует строки в БД при определенных условиях, учитывая параметры, передаваемые в процедуру. Появилась неободимость написать сервлет, чтобы обычные пользователи через хтмл-страницу могли вводить параметры и выполнялась бы эта же процедурка, в которую бы передавалось то, что вводится пользователем.

НО...

в оракле в процедуре есть проверка на существование в БД строк с передаваемыми значениями. при наличии таких строк выдается ошибка. 

Вопрос в следующем, как в Java обработать эту ошибку и выдать ее пользователю?

Вот как выглядит ошибка в оракле:
Код

RAISE_APPLICATION_ERROR(-20006,'Kod='||kod_||' uzhe sushestvuet.');

Автор: necromancer 13.1.2009, 10:06
если я не ошибаюсь, то при возникновении такой ошибки ты словишь SQLException

Автор: Swatch 13.1.2009, 10:14
да, я вот тоже так подумала... но у меня проверяются 2 параметра и ошибки разные... вопрос в том, как их разделить? то есть, как узнать, какая именно ошибка?

Автор: necromancer 13.1.2009, 12:36
смотрим сюда:
RAISE_APPLICATION_ERROR(-20006,'Kod='||kod_||' uzhe sushestvuet.');

(SQLException e) {
   e.getMessage(); // вернет тебе 'Kod='||kod_||' uzhe sushestvuet.'
}
дальше уже ты можешь строку парсить на код ошибки.
Ну а более парвильный путь, это иметь 2 ошибки:
RAISE_APPLICATION_ERROR(-20006,'A uzhe sushestvuet.');
RAISE_APPLICATION_ERROR(-20007,'B uzhe sushestvuet.');

Автор: Swatch 13.1.2009, 16:18
Угу, я уже сообразилаsmile спасибо... в той же последовательности, что Вы написали. но все равно спасибоsmile за участиеsmile

Автор: DimW 19.1.2009, 15:16
Цитата(necromancer @  13.1.2009,  12:36 Найти цитируемый пост)
Ну а более парвильный путь, это иметь 2 ошибки:

еще более правильный путь разделить две ошибки на стороне БД в процедуре, поскольку вы ее всеравно используете:

Код

begin
  if p_param = 0 then
    raise_application_error(-20001, 'параметер не может быть 0!');
  else
    raise_application_error(-20002, 'параметер введен верно!');
  end if;
end;


как видите уже не требуется разбор ошибки на уровне апп сервера.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)