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

在做透支转账时,前台报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个回答

在dao层抛出,EmpDao

weixin_39147947
weegle2014 dao层处理早了,在controller层处理,还是谢谢大森的思路
接近 2 年之前 回复
weixin_39147947
weegle2014 回复weixin_37799792: 大神,是不是不能用注解方式的声明事务啊?
接近 2 年之前 回复
weixin_39147947
weegle2014 回复weixin_37799792: 嗯,前台是不报错了,后台也抓住异常了,但是事务不起作用了,转出的账户钱没变,转入的账户钱增加了。。。
接近 2 年之前 回复
weixin_37799792
csdnKeyborder 然后在service层捕获异常,并返回错误的提示信息给controller,并返回给页面
接近 2 年之前 回复

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

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

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

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

qq_39086076
软件三班刘同学 回复weixin_39147947: 他报的异常就是说你sql语句有问题 也就是你的 mapper.xml 配置文件里面
接近 2 年之前 回复
qq_39086076
软件三班刘同学 回复weixin_39147947: ssm 肯定要有sql
接近 2 年之前 回复
weixin_39147947
weegle2014 我也没写过sql语句啊,就是不想写才用的ssm
接近 2 年之前 回复

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

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

weixin_39147947
weegle2014 回复aiwumian: 嗯,有非负检查
接近 2 年之前 回复

原来是在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层处理早了

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

用 for each 来包住异常

共11条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐