gpt4 book ai didi

java - 如何从 mysql 触发器中捕获 sqlException 或信号消息

转载 作者:行者123 更新时间:2023-11-30 21:37:07 33 4
gpt4 key购买 nike

我想从 mysql 数据库捕获触发器的消息并通过我的 thymeleaft 模板打印它,但是我在捕获该触发器的消息时遇到了问题

宠物库的一部分

 void save(Pet pet) throws SQLException;

这是 Controller 的一部分,捕获方法不起作用,我不知道如何正确执行

   @PostMapping("/pets/new")
public String processCreationForm(Owner owner, @Valid Pet pet, BindingResult result, ModelMap model) {
if (StringUtils.hasLength(pet.getName()) && pet.isNew() && owner.getPet(pet.getName(), true) != null){
result.rejectValue("name", "duplicate", "already exists");
}
owner.addPet(pet);
if (result.hasErrors()) {
model.put("pet", pet);
return VIEWS_PETS_CREATE_OR_UPDATE_FORM;
} else {
try {
this.pets.save(pet);
}catch (SQLException e){


System.out.println("mamamamam"+e.getSQLState());
}
return "redirect:/owners/{ownerId}";
}
}

错误:

2018-11-19 23:26:24.025  WARN 4532 --- [nio-8080-exec-6] o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Error: 1644, SQLState: 45000
2018-11-19 23:26:24.025 ERROR 4532 --- [nio-8080-exec-6] o.h.engine.jdbc.spi.SqlExceptionHelper : Za duzo zwierzat
2018-11-19 23:26:24.040 ERROR 4532 --- [nio-8080-exec-6] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.orm.jpa.JpaSystemException: could not execute statement; nested exception is org.hibernate.exception.GenericJDBCException: could not execute statement] with root cause

java.sql.SQLException: Za duzo zwierzat

这是 mysql 触发器的相关部分(触发器工作)

if (ilosc_zwierzat>1)
then
signal sqlstate '45000' SET MESSAGE_TEXT = 'Za duzo zwierzat';

end if;

我尝试这样做,但它不起作用(我的页面上有很多文本错误。)

 @ExceptionHandler(SQLException.class)
public ModelAndView handleError(HttpServletRequest req, Exception ex) {

System.out.println("WIADMOSCcccccccccccccccccc"+ex.getMessage());
ModelAndView mav = new ModelAndView("error2");
mav.addObject("er", ex.getMessage());
mav.addObject("url", req.getRequestURL());
mav.setViewName("error2");
return mav;
}

最佳答案

好吧,因为这是个老问题,我知道答案了。我应该简单地使用 Spring JDBC 来更好地控制 sqlexception 处理,如果我使用 JPA,它会为我处理错误,所以不是我想要的

关于java - 如何从 mysql 触发器中捕获 sqlException 或信号消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53383649/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com