weixin_39147947
weegle2014
采纳率100%
2018-07-04 01:42 浏览 1.8k

ssm框架中,如何抛出sql语句检查约束异常?

10

在做透支转账时,前台报500,提示:违反检查约束条件;
不知在哪里抛出或者声明异常,请大神指点
前台报错500,内容如下:
exception

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.dao.DataIntegrityViolationException:

Error updating database. Cause: java.sql.SQLException: ORA-02290: 违反检查约束条件 (PEPE.SALARY)

The error may involve com.zrgk.ssm.dao.EmpDao.updateSal-Inline

The error occurred while setting parameters

SQL: update emp set salary=salary+? where empid=?

Cause: java.sql.SQLException: ORA-02290: 违反检查约束条件 (PEPE.SALARY)

; SQL []; ORA-02290: 违反检查约束条件 (PEPE.SALARY)
; nested exception is java.sql.SQLException: ORA-02290: 违反检查约束条件 (PEPE.SALARY)

service实现类代码如下:
(已做转账的声明式事务)

@Service
public class EmpServiceImpl implements EmpService {
    @Autowired
    private EmpDao ed;

    @Override
    @Transactional(readOnly=false,propagation=Propagation.REQUIRED)
    public void zhuan(Integer ruid, Integer chuid, Double money) {
        // TODO Auto-generated method stub

        //先转入
        ed.updateSal(new Emp(ruid,null, money));
        //再转出
        ed.updateSal(new Emp(chuid, null, -money));

    }
}

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

11条回答 默认 最新

  • 已采纳
    weixin_37799792 csdnKeyborder 2018-07-04 01:45

    在dao层抛出,EmpDao

    点赞 1 评论 复制链接分享
  • qq_19260033 小付同学哦 2018-07-04 02:35

    最好是做一个异常处理类,统一处理异常,然后又异常的地方throw即可

    点赞 2 评论 复制链接分享
  • Lei_Da_Gou Lei_Da_Gou 2018-07-04 01:48

    1.违反约束条件是你程序的验证没做好把,约束做好了怎么会报约束错误。
    2.做全局异常处理器统一处理异常,抛就抛自己自定义的异常。

    点赞 评论 复制链接分享
  • weixin_36933842 weixin_36933842 2018-07-04 01:56

    做全局异常处理器统一处理异常,抛就抛自己自定义的异常

    点赞 评论 复制链接分享
  • qq_39086076 软件三班刘同学 2018-07-04 03:22

    这个你仔细看一下的你写的sql语句,多了分号什么的 你检查一次sql

    点赞 评论 复制链接分享
  • weixin_41981864 weixin_41981864 2018-07-04 05:26

    估计是sql语句写的有问题,你可以试试一个简单的查询看看。

    点赞 评论 复制链接分享
  • aiwumian aiwumian 2018-07-04 06:38

    最好看下数据库的表创建语句,看下SALARY字段设置了什么约束规则或者索引,应该是更新后的数据跟字段上设置的约束规则冲突了

    点赞 评论 复制链接分享
  • weixin_39147947 weegle2014 2018-07-04 07:04

    原来是在conroller中把对应方法try catch,然后return到提示错误页面,代码如下:

    @RequestMapping("zhuan.do")
        public String zhuan(Integer ruid,Integer chuid,Double money){
            try {
                es.zhuan(ruid, chuid, money);
            } catch (Exception e) {
                // TODO Auto-generated catch block
                return "error.jsp";
                //e.printStackTrace();
            }
            return "redirect:zhuan.jsp";
        }
    
    

    dao层处理早了

    点赞 评论 复制链接分享
  • qq_30867779 筱雪花 2018-07-04 07:13

    写一个全局的处理异常方法,所有异常都会被拦截

    点赞 评论 复制链接分享
  • qq_39572160 qq_39572160 2018-07-04 10:22

    用 for each 来包住异常

    点赞 评论 复制链接分享
  • yu770343421 看着星星写代码 2018-07-06 08:42

    使用spring AOP编程了 对异常 日志同意管理

    点赞 评论 复制链接分享

相关推荐