#sql-server #hibernate #stored-procedures #jdbc #try-catch
#sql-сервер #спящий режим #хранимые процедуры #jdbc #попробуйте -поймайте
Вопрос:
Приложение Java Hibernate вызывает мою хранимую процедуру в SQL Server 2019 через JDBC
Хранимая процедура имеет блок begin / catch
Несмотря на то, что я улавливаю ошибку, об ошибке сообщается Java как об исключении, а затем приложение завершается с ошибкой
С точки зрения базы данных (и бизнеса) ошибка была обнаружена, и все в порядке
Мне нужно, чтобы приложение Java не вызывало исключение, поскольку ошибка была правильно обработана хранимой процедурой
Есть ли какая-либо конфигурация или что-то (в SP), что я могу добавить?
ПРИМЕЧАНИЕ: я на стороне БД, код Java не входит в мою область, его нельзя изменить
ДОБАВЛЕНО
Я имею в виду, какую бы ошибку, например:
CREATE PROCEDURE SP_TEST
AS
BEGIN TRY
SELECT 1/0 as x
PRINT 'no problem'
END TRY
BEGIN CATCH
SELECT 1 as x
PRINT 'don´t pay attention'
END CATCH
PRINT 'good bye'
return 0 -- always 0 = OK
Несмотря на то, что ошибка каким-то образом управлялась хранимой процедурой
, клиентское приложение получает ее
Я действительно не знаю, нормально ли это для драйвера или движка
Комментарии:
1. Добавьте пример кода для хранимой процедуры и ошибки, которые вы хотите подавить.
2. Вы используете блок T-SQL
CATCH
? Исключение JdbcException не должно возникать на клиенте, если ошибка не была повторно вызвана в блоке catch.3. Дэн, на следующей неделе я смогу опубликовать подробную информацию о клиентском приложении, то есть фрагмент кода Java, который улавливает исключение, и, возможно, некоторые комментарии разработчика Java
4. О каком конкретном типе исключения сообщается в вашем Java-приложении? Основываясь на вашем опубликованном примере кода, я ожидаю, что это исключение, созданное приложением, а не исключение SQL, потому что оно
select 1/0
все равно вернет результирующий набор в приложение — у него будет только 1 неназванный столбец и 0 строк.