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

标签 java mysql spring

我想从 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/

相关文章:

java - 具有 Spring Boot 集成的 Cucumber Java - Spring @Autowired 抛出 NullPointer 异常

java - Spring Boot "Ignored because not a concrete top-level class"

java - getAllFonts() 在不同的机器上返回不同的名称

java - 是否可以配置 Eclipse 以突出显示 XML 中的 Java 语法?

mysql查询函数-日期范围

php - 以编程方式用年月值填充列

spring - 接受参数的构造函数 - 定义为普通对象或spring bean?

使用 SQL 的 Java 程序 - 编译成 .jar

java - 将文本框的值传递给 java servlet

mysql - ORDER BY 来自不同表的具有相同选项 ID 的行数