【发布时间】:2019-12-31 01:21:28
【问题描述】:
我无法捕获来自我创建的存储过程的错误。
create procedure sp_users
@option int = 0,
@nom_user varchar(50) = null,
@ema_user varchar(50) = null
as
begin
set nocount on
begin try
if @option = 2
begin
if not exists (select * from tb_users where ema_user = @ema_user)
begin
insert into tb_users values (@nom_user,@ema_user)
end
else
begin
raiserror('The email already exists',16,1)
end
end
end try
begin catch
declare @errorMessage varchar(100), @errorSeverity int, @errorState int
set @errorMessage = error_message()
set @errorSeverity = error_severity()
set @errorState = error_state()
raiserror(@errorMessage,@errorSeverity,@errorState)
end catch
end
当我输入一个已经存在的电子邮件时,它会向我显示消息。
Msg 50000, Level 16, State 1, Procedure sp_users, Line 71 [Batch Start Line 81]
The email already exists
这是我在 Spring Boot 中编写的代码
@Service
public class CrudUserService implements CrudUserDAO{
@PersistenceContext
private EntityManager em;
@SuppressWarnings({ "unchecked" })
@Override
public ValidateApiResponse MntUser(Integer op, String nom, String ema) {
ValidateApiResponse vapi = new ValidateApiResponse();
Session session = em.unwrap(Session.class);
try {
ProcedureCall call = session.createStoredProcedureCall("sp_users");
call.registerParameter(1, Integer.class, ParameterMode.IN);
call.registerParameter(2, String.class, ParameterMode.IN).enablePassingNulls(true);
call.registerParameter(3, String.class, ParameterMode.IN).enablePassingNulls(true);
call.setParameter(1, op);
call.setParameter(2, nom);
call.setParameter(3, ema);
call.execute();
vapi.dTable = call.getResultList();
vapi.Attr = "OK";
} catch (Exception e) {
//vapi.Attr = "";
//vapi.Error = e.getMessage();
System.out.println(e.getMessage());
} finally {
session.close();
}
return vapi;
}
}
当我尝试在 spring boot 中捕获错误时,我在控制台中得到了这个。它向我显示了消息,但我无法从 SqlExceptionHelper 捕获该消息。
2019-12-30 19:19:22.892 WARN 10504 --- [nio-8090-exec-2] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 50000, SQLState: S0001
2019-12-30 19:19:22.893 ERROR 10504 --- [nio-8090-exec-2] o.h.engine.jdbc.spi.SqlExceptionHelper : The email already exists
org.hibernate.exception.SQLGrammarException: Error calling CallableStatement.getMoreResults
【问题讨论】:
-
有什么想法吗?
-
这和你的问题一样。检查答案:stackoverflow.com/a/54323882/2445028
-
你告诉我的没用,但我仍在寻找帮助我的人
标签: spring-boot exception sql-server-2017 sqlexception