问题描述
在公司业务中需要批量向mysql中写数据,总是出现错误:Duplicate entry ‘[info]’ for key ‘PRIMARY’;
思考
出现错误的原因是mysql数据表设置了主键primary key,而批量写入的数据中设了主键的字段与数据库中的数据有重复。那么解决方法就简单了,剔除重复的数据。
解决方法
拿到报错信息,从数据中移除重复的数据,重新执行写入操作,完成。
try{//此处是可能会出现此异常的java语句}catch(SQLException e) {//获取错误信息String message = e.getMessage();if (message.matches("Duplicate entry (.*) for key 'PRIMARY'")) {//拿到重复的room_id,这里的CharacterFilter是我的工具类String rejected = CharacterFilter.numberFilter(message);//移除重复数据,这里的data是Listreject(data,rejected);}}/** 剔除 */public void reject(List<你的实体类> data, String rejected) {//循环遍历Listfor (Iterator<FlowChartCategory> iterator = data.iterator();iterator.hasNext();) {//拿到主键信息String 主键 = iterator.next().getXXXXX();//比对if (主键.equals(rejected))//移除重复的数据iterator.remove();}}
其中CharacterFilter.numberFilter()是我自定义的工具类及方法,主要作用就是从字符串中过滤其他字符拿到数字。详情参考:/yeah_you_are/article/details/120676629?spm=1001..3001.5501
如果觉得《Duplicate entry ‘‘ for key ‘Primary‘》对你有帮助,请点赞、收藏,并留下你的观点哦!