添加数据库信息时抛出com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolatio异常

一:场景

这里使用的是SpringMVC+Hibernate+Mysql:在向数据库中添加数据时抛出异常。
这篇文章解决问题是次要的,而是我们每次看到问题时如何分析,如果解决,这个过程很重要。

下面是我的异常:不重要的信息已经被我删除了

HTTP状态500 –内部服务器错误
类型异常报告

消息请求处理失败;嵌套异常为javax.persistence.PersistenceException:org.hibernate.exception.ConstraintViolationException:无法执行语句

描述服务器遇到意外情况,阻止其满足请求。
org.springframework.web.util.NestedServletException:请求处理失败;嵌套异常为javax.persistence.PersistenceException:org.hibernate.exception.ConstraintViolationException:无法执行语句
	
根本原因
javax.persistence.PersistenceException:org.hibernate.exception.ConstraintViolationException:无法执行语句

根本原因
org.hibernate.exception.ConstraintViolationException:无法执行语句
	
根本原因
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:键'PRIMARY'的条目'0'重复
Apache Tomcat/8.5.45

首先我们看一下这里提示无法执行语句,并且指出HelloWorldController的第48行有问题
添加数据库信息时抛出com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolatio异常_第1张图片
第48行是:transaction.commit(); 所以很明显是我们提交事务的时候出错。
添加数据库信息时抛出com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolatio异常_第2张图片
接着往下看,这里说我们的主键条目0重复,我们去数据库中看一下。
添加数据库信息时抛出com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolatio异常_第3张图片
果然我们插入了一条数据,主键竟然是0
添加数据库信息时抛出com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolatio异常_第4张图片
这时我们在插入一条数据,则就又抛出了异常,这已经很明显,是又插入了一条主键为0的数据,主键重复所以抛出了异常。
添加数据库信息时抛出com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolatio异常_第5张图片
最后我们添加上主键自增以后,再添加信息就正常了。这里还有一个小问题:当你设置主键自增时可能会提示下面错误信息,这是因为当时你插入的那条信息id为0,因为主键不可以为0,所以会设置失败。
添加数据库信息时抛出com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolatio异常_第6张图片
我们将该条主键为0的记录删除,重新设置就可以了。
添加数据库信息时抛出com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolatio异常_第7张图片
最后我们再去向数据库中添加数据就正常了,数据也会从后面显示了。
细心的同学已经发现我的数据库中插入的数据时乱码:下面是参考文章,我的已经解决了
解决jsp页面提交数据到数据库的乱码问题:https://www.cnblogs.com/AndrewXu/p/5494973.html
解决IDEA启动tomcat时出现的中文乱码问题:https://www.cnblogs.com/sxdcgaq8080/p/7648400.html

我写文章的目的时记录下当时的错误,如果你们也遇到同样的错误可以减少找bug的时间,可以提高效率,也方便我自己以后忘了的时候回来回顾,如果文章对你有帮助,那就点个赞吧,谢谢!

你可能感兴趣的:(SpringMVC)