luckystar 发表于 2018-11-9 14:24:08

单表类型的异常抛出

      版本3.7.3-3.8都存在这样的现象,在设置单表类别捕获了事务异常,但是在操作者页面,只是报操作错误而没有描述具体的错误信息,譬如一个事务异常,跟踪发现异常信息报:终止日期小于起始日期,请确认!但在操作者页面报的只是操作错误。。。。。

    /**
    * sql业务增强
    *
    */
   public void executeSqlExtend(String formId,String buttonCode,Map<String, Object> data)throws BusinessException{
      //根据formId和buttonCode获取
      CgformButtonSqlEntity cgformButtonSqlVo = getCgformButtonSqlByCodeFormId(buttonCode,formId);
      if(cgformButtonSqlVo!=null){
         //获取sql参数注入参数
         String sqlPlugin = cgformButtonSqlVo.getCgbSqlStr();
         if(StringUtils.isNotEmpty(sqlPlugin)){

            boolean isMiniDao = false;
            logger.debug("sql plugin -------->"+sqlPlugin);                  
            String sqlPluginTemp = formateSQl(sqlPlugin,data);
            logger.debug("sql formate plugin -------->"+sqlPluginTemp);
            try{
               //注入系统环境变量(支持占位符用法)
               data = minidaoReplaceExtendSqlSysVar(data);
               sqlPlugin = FreemarkerParseFactory.parseTemplateContent(sqlPluginTemp, data);
               isMiniDao = true;
            }catch(Exception e){
               logger.debug(e.getMessage());
               logger.debug("minidao转换不成功,使用正常sql处理");
               sqlPlugin = sqlPluginTemp;
            }

            String [] sqls = sqlPlugin.split(";");
            for(String sql:sqls){

               //添加逻辑后,有可能造成sql为空
               if(sql == null || sql.toLowerCase().trim().equals("")){
                  continue;
               }

               /*if(sql.toLowerCase().indexOf(CgAutoListConstant.SQL_INSERT)!=-1
                     ||sql.toLowerCase().indexOf(CgAutoListConstant.SQL_UPDATE)!=-1){*/
               if(true){

                  //执行sql

                  int num = 0;
                  if(isMiniDao){
                     try {
                        num = namedParameterJdbcTemplate.update(sql, data);
                     } catch (Throwable e) {
                        logger.error(e.getMessage());
                        e.printStackTrace();
                        throw new BusinessException(e.getMessage());
//                      e.printStackTrace();
                     }
                  }else{
                     try {
                        num = this.executeSql(sql);
                     }catch (Throwable e) {
                        logger.error(e.getMessage());
                        e.printStackTrace();
                        throw new BusinessException(e.getMessage());
//                      e.printStackTrace();
                     }
                  }

jeecg_ty 发表于 2018-11-9 14:43:32

这个问题我记得我改过了,也测过了,也回复过了,我现在再测一边,没有问题的话,你以后的问题我不会再理。

jeecg_ty 发表于 2018-11-9 15:06:33

http://www.jeecg.org/forum.php?mod=viewthread&tid=7080&extra=page%3D3
这个帖子我再给你找出来,我就纳闷了,这异常没抛出去吗?你自己在控制层get一下不行吗?

jeecg_ty 发表于 2018-11-9 15:44:11

本帖最后由 jeecg_ty 于 2018-11-9 15:46 编辑

我也不多说了,我直接把我测试的贴出来你自己看看:
我先在一张表上定义一个触发器:如果更新的时候字段值是1234那么抛出异常 异常信息"手动抛出异常"drop trigger if exists `testupdate`;
CREATE TRIGGER `testupdate`#
BEFORE update   
ON test_single
FOR EACH ROW
begin

    if new.name ='1234' then
      
                        SIGNAL SQLSTATE 'ABC00' SET MESSAGE_TEXT = '手动抛出异常' ;
    else
   
                        SET new.CREATE_DATE = NOW();
    end if;
end;然后找张表测试:
结果如图:


luckystar 发表于 2018-11-16 08:59:28

本帖最后由 luckystar 于 2018-11-16 09:01 编辑

      在设置单表类别捕获了事务异常,但是在操作者页面,只是报操作错误而没有描述具体的错误信息

看不明白吗?就是异常已经抛了出来,但是页面没有显示出来!使用的是online定制的页面没有具体错误信息,不过现在好了,不管了。。。。

页: [1]
查看完整版本: 单表类型的异常抛出