У меня есть хранимая процедура в базе данных SQL Server 2008, и я разрабатываю приложение Java, использующее соединение sqljdbc4. Все работает нормально, даже вызов процедуры, но есть одно но - в некоторых случаях java не отлавливает возбужденное исключение, выброшенное процедурами и указанное при вызове типа select или update (delete insert)
вот пример
AS
BEGIN
DECLARE @c INT
SELECT @c= COUNT(nomUtilisateur)
FROM Utilisateur2
PRINT @c
RAISERROR(N'error message personalise',18,1)
END
в этом случае java ловит исключение
try{
CallableStatement cll=con.prepareCall("EXEC f3 ");
cll.execute();
System.out.println("fin EXEC f3 ? ");}
catch (SQLException e) {
System.out.println("sqlerror state: "+e.getSQLState() +" |error code: "
+ e.getErrorCode()+" |message: "+e.getMessage());
e.printStackTrace();
}
но когда я использую такой выбор
ALTER PROCEDURE [dbo].[f3]
AS
BEGIN
declare @c INT
SELECT @c= COUNT(nomUtilisateur)
FROM Utilisateur2
select * from Utilisateur2
PRINT @c
RAISERROR(N'error message personalise',18,1)
END
или обновление, java продолжает выполнение без перехвата исключения. Как будто не ждет окончания процедуры.
Итак, мой вопрос: неправильно ли я использую хранимую процедуру, или это ошибка в драйвере jdbc, или он предпочитает использовать параметр out и оставить эту стратегию; Я погуглил эту проблему, ничего не найдя.
Лично я хочу использовать поднятую ошибку
**select * from Utilisateur2**
? Это недопустимый синтаксис SQL, насколько мне известно, и я не могу заставить эту процедуру скомпилироваться ни на одном из моих SQL-серверов. - person RBarryYoung   schedule 20.10.2012