mysql写入数据,发生字段粘连问题

 

我尽量叙事的清楚点吧,可能稍微啰嗦点。报错内容让我很头疼,我都开始怀疑mybatits 3.0.2 和mysql 5.1是不是本身就有bug了。

请大神们稍事略过下面的代码,然后我再叙述

项目使用到了spring 3  + mybatits 3.0.2 + mysql 5.1

在存储历史记录是报错。偶尔报错,感觉应该是万分之几的概率吧。

Caused by: org.springframework.dao.DuplicateKeyException: SqlSession operation; SQL []; Duplicate entry '5879889-35399' for key 'user_id'; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '5879889-35399' for key 'user_id'
    at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:241)
    at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72)
    at org.mybatis.spring.SqlSessionTemplate.wrapException(SqlSessionTemplate.java:364)
    at org.mybatis.spring.SqlSessionTemplate$7$1.doInSqlSession(SqlSessionTemplate.java:344)
    at org.mybatis.spring.SqlSessionTemplate.execute(SqlSessionTemplate.java:173)
    at org.mybatis.spring.SqlSessionTemplate.execute(SqlSessionTemplate.java:155)
    at org.mybatis.spring.SqlSessionTemplate$7.invoke(SqlSessionTemplate.java:339)
    at $Proxy59.addFavorite(Unknown Source)
    at -------------------------------------.addFavorite(---------.java:104)
    at -------------------------------------$$FastClassByCGLIB$$bf29fae7.invoke(<generated>)
    at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149)
    at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:692)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:625)
    at ------------------------------------$$EnhancerByCGLIB$$1aaa1136.addFavorite(<generated>)
    at-------------------------------------.addFavorite(--------.java:277)
    ... 32 more
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '58179889-353994' for key 'user_id'
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
    at com.mysql.jdbc.Util.getInstance(Util.java:386)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1039)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3609)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3541)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2002)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2163)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2624)
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2127)
    at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1362)
    at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.execute(NewProxyPreparedStatement.java:989)
    at org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:22)
    at org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:51)
    at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:29)
    at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:73)
    at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:43)
    at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:102)
    at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:91)
    at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:54)
    at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:35)
    at $Proxy59.addFavorite(Unknown Source)
    at sun.reflect.GeneratedMethodAccessor926.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.mybatis.spring.SqlSessionTemplate$7$1.doInSqlSession(SqlSessionTemplate.java:342)
    ... 48 more

 

   上面一堆横杆是我替换了我项目的路径或者类名,

    异常中得Duplicate entry '5879889-35399' for key 'user_id'我解释一下

    5859889是用户id,35399是书籍id,我再写sql的时候,明明是写对对应的字段的。但是在写入数据库的时候就报错了。

    sql如下

 

   <insert id="addFavorite"  useGeneratedKeys="true" keyProperty="id"  >
        INSERT INTO favorites (<include refid="favorite.columns" />
         <![CDATA[
        ) VALUES (
            #{id} ,
            #{userId} ,
            #{bookId} ,
            NOW() 
        )
    ]]>
  </insert>

   业务代码如下

 

 

favorite = new Favorite();
favorite.setBookId(bookInfo.getId());
favorite.setUserId(user.getId());
FavoriteFacade.addFavorite(favorite);// 加入收藏

    对于favorite的bookId和userId我都设置的是Integer类型。

 

    不知道为什么,两个字段的内容,再写入数据库的时候,就写在了一块。中间的 - ,是咋回事啊,哪里冒出来的啊????数据库中user_id是int类型。

    项目跑了许久了。但是时不时就报着个错误。我感觉我的代码,写的没问题。所以就开始怀疑mybatits 3.0.2 和mysql 5.1是不是本身就有bug了。

    大神们,给点建议吧~~~

   

 

 

 

0

5个回答

Duplicate entry '5879889-35399' for key 'user_id'

应该就是主键重复的问题吧

你的userId 和 bookId 是不是联合主键

0
ft3159572
ft3159572 果真,是联合主键。
大约 5 年之前 回复

看了lz的问题,我也有些疑惑,经常遇到一些奇怪的问题,开始怀疑这怀疑那,后来找到问题的时候通常都是一些低级错误引起的。

你可以试试这样,
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '58179889-353994' for key 'user_id'

这个异常应该是mysql的驱动包里的,你用Maven自动下载了源码,找到抛异常的这段代码看是否是捕获的,如果是捕获的话就去catch里打断点,如果是抛出的那外层肯定也有捕获的代码,应该能查到到当前的执行的sql

另外你的mybatis是否有自定义拦截器?如果有仔细检查拦截器的代码,特别是if语句块的代码

0

你favorites 表的id字段是不是设置为auto_increment,而insert语句中又直接赋了#{id}

检查下是不是可能这个原因造成的

0
iteye_7115
iteye_7115 我理解错了,你写的没啥问题,主要是一看到Duplicate entry 就第一反应是出现重复数据了
大约 5 年之前 回复

你可以在数据源上封装一层SQL日志框架,先看看MYBATIS生成的SQL对不对,你可以用这个SQL监控框架,p6spy.

0

很明显呀 索引 user_id(unique) 重复
你的表中有已经存在 user_id(5879889) bookid(35399)的数据了
应该在插入数据前检查数据是否已经存在

0
ft3159572
ft3159572 谢谢,是数据重复了,数据库写的是联合主键。
大约 5 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
TCP包防粘连的读取方法
一种读取TCP包的方法,可以防粘连。
css经典布局系列四——粘连(css sticky footer)布局
文章目录什么是黏连布局(css sticky footer)方法一:footer 上用负的 margin-top方法二:负margin-bottom方法三:flex布局 什么是黏连布局(css sticky footer) 当main的高度足够长的时候,紧跟在&lt;\main&gt;后面的元素&lt;\footer&gt;会跟在其后面; 当&lt;\main&gt;元素比较短的时候(比如...
tcp报文黏连及解决方法
      TCP报文粘连就是,本来发送的是多个TCP报文,但是在接收端受到的却是一个报文,把多个报文合成了一个报文。 TCP报文粘连的原因: 1.TCP协议采用了Nagle算法     Nagle算法产生的背景是,当时为了解决发送多个非常小的数据包时(比如1字节),由于包头的存在而造成巨大的网络开销,也就是糊涂窗口综合征(silly window syndrome)。简单的讲,Nagle算...
opencv学习笔记五十六:基于分水岭的粘连对象分割
一、基于分水岭的分割算法是受自然界地貌启发而来的对灰度图的地形学解释,我们考虑以下三点: 1. 局部最小值点,该点对应一个盆地的最低点,当我们在盆地里滴一滴水的时候,由于重力作用,水最终会汇聚到该点。注意:可能存在一个最小值面,该平面内的都是最小值点。 2. 盆地的其它位置点,该位置滴的水滴会汇聚到局部最小点。 3. 盆地的边缘点,是该盆地和其它盆地交接点,在该点滴一滴水,会等概率的流向任何...
字符粘连切分方法
目的 本方法目的在于解决英文字母OCR中存在的字符粘连问题,使得算法的运算结果更为准确。化学式中存在的粘连问题主要有以下几个特点:一是字符种类较少,大都由常见化学元素的组合和基本的数字构成;二是字符的宽度基本一致,一般不存在一大一小的情况,这方便了我们使用字符宽度这一定界条件而又不影响切分的准确性;最后一个是字符的走向大都是水平方向,因此我们在切割时只需要考虑竖直向的切割即可。 解决对象 ...
#基础#粘连布局
###总结 1.footer必须是一个独立的结构,与wrap没有任何嵌套关系 2.footer要使用margin为负来确定自己的位置 3.wrap区域必须要被自己的子元素撑开 4.如果真的想在wrap区域外添加其他结构,这个结构必须定位&amp;lt;!DOCTYPE html&amp;gt;&amp;lt;html lang=&quot;en&quot;&amp;gt;&amp;lt;head&amp;gt; &amp;lt;meta...
Mysql写入数据的错误,很容易忽视掉!
先说错误,在写入数据库的时候一直报错“ You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'by agent_id,name ) as a' at line 2 [ SQL语句
QString转换为char *时出现的问题
这几天尝试用QT进行程序设计,出现了不重复出现,而且毫无规律的BUG,最后查出来是在QString转换为char *时出现的问题
OpenCV之图像分割(三) 分水岭分割方法 粘连对象分离与计数&图像分割
基于距离的分水岭分割流程: 代码:粘连对象分离与计数 /* 读取图像,将原图上进行pyrMeanShiftFiltering()处理,保留更多的边缘信息, 在平滑区进行滤波,保证后面二值化时的效果更好, 转成单通道,二值处理,进行距离变换,将距离变换的结果归一化,找到山峰 再一次进行二值化处理,转到CV_8U类型的图像 进行轮廓发现,绘制轮廓,每次绘制轮廓时用不同的值对每个轮廓进行标记 ...
基于matlab的分水岭算法分割黏连细胞程序
基于matlab的分水岭算法分割黏连细胞程序代码。。。。。
干货:实现拖拽效果
备注:加粗字段就是实现元素跟随鼠标移动的事件。 var redDiv = document.getElementById('redDiv'); var box = document.getElementsByClassName('box')[0]; var body = document.getElementsByTagName('body')[0]; redDiv.onm
DBF编辑工具(大于255字段可编辑)
最近做了个医疗行业的病案DBF文件导入导出的工具,解决了字段大于255无法写入数据的问题,花了好长时间,共享出来,
插入数据到MySql数据库
学习任务   用sql语句插入一条数据   学习目标 知识目标     熟悉对数据库的插入语句     学会对数据库的插入操作 能力目标     能够熟练对数据库进行插入数据的操作     插入语句语法 sqli="insert into studentvalues(%s,%s,%s,%s)" %s表示一个参数 cur.execute(sqli,('4','yan
laravel5.1 数据无法正常写入mysql
现象: 现有一个类LeaveModel继承自model,在LeaveModel中使用create方法写数据库,要写入的values没有写进数据库,但是数据库记录增加了一条,只是所有列的值都是default值而非所设置的values。 建表语句: $model = new LeaveModel(); $model->create($values); 原因: 在LeaveModel中
Python 在 MySQL 中读取、写入数据
Python 在 MySQL 中读取、写入数据写入数据: import pandas as pd from sqlalchemy import create_engine import pymysql#准备一个示例数据 df = ts.get_hist_data('000875')#读取数据,格式为DataFrame #创建一个engine engine = create_engine(
mysql中datetime类型的字段为“0000-00-00 00:00:00”时,系统处理报错的解决方法
问题描述: 数据表中有记录的time字段(属性为timestamp)其值为:“0000-00-00 00:00:00” 程序使用select 语句从中取数据时出现以下异常: java.sql.SQLException:Value '0000-00-00' can not be represented as java.sql.Date 后查资料发现 “0000-00-00 ...
opencv对字符进行细化的代码(粗字符变细,解决数字粘连的问题)
opencv对字符进行细化的代码(粗字符变细,解决数字粘连的问题),ocr字符识别,效果不错
【mysql基础知识】解决java写入数据库时中文乱码的问题
一、保证编程工具的编码格式正常我用的IDEA,根据之前写的一篇博文(想看请直接点击),将IDEA的所有编码格式都统一为utf-8编码格式。二、保证数据库编码格式正常我遇到的问题是像数据库写入某个字段时中文显示?。然后就查看数据库中该字段对应的编码格式是不是与IDEA的编码格式相同。方法如下:(1)通过Navicat软件选择你要写入的数据表,右击选择“设计表”。(2)打开后,单击出现乱码的字段,查看...
Halcon中使用OCR时字符的分割以及字符粘连的处理方法
字符的分割是指在原图中将字符分割为单个的字符区域。这样,这些单个的字符才能被当作字符样本来训练分类器。因此,样本字符分割的好坏很大程度上影响mlp分类器的分类效果。
scala实战之spark源码修改(能够将DataFrame按字段增量写入mysql数据表)
在上一篇博文中,我们可以简单的应用官网的给出的一些接口提取mysql数据表中的数据到spark中,也可以将spark的运行结果存入mysql中。 但是我们会发现spark将其DF存入mysql的时候,无论你选择什么模式: jdbcDF.write.mode(SaveMode.Overwrite).jdbc(url,"zfs_test",prop) jdbcDF.write.mode(SaveMode.Append).jdbc(url,"zbh_test",prop) 结果都是会重建这个表。 这样一来这个表之
spark写入mysql的几种方法,针对不同场景
方法一:各个字段都是提前定好的 val prop = new java.util.Properties prop.setProperty(&amp;quot;user&amp;quot;, &amp;quot;root&amp;quot;) prop.setProperty(&amp;quot;password&amp;quot;, &amp;quot;123456&amp;quot;) df1.write.mode(SaveMode.Append).jdbc(&amp;quot;jdbc:mysql:
C51键盘检测相关问题总结
1.对独立键盘的检测 /*-------------------------- 功能:用数码管实现60s计时器 上电时,数码管显示00 key4控制开始/暂停计时 暂停状态下,key1进行加1操作 key2进行减1操作 key3进行清零操作 --------------------------- Author: Zhang Kaizhou Date: 2019-5-19 19:14:20 ----...
mysql+C#实战一:向数据库里面写入数据
首先,得打开数据库工作站; 然后从文件中添加数据接口dll,再写入C#语句 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.C
mysql添加字段,并插入数据。
eg:在表Agent中添加一个字段agent_name,该字段的值为Agent中已经存在的字段agent_id对应的name(这个name可以根据其他表获取)。 步骤: 1.先添加字段:ALTER table Agent ADD agent_name VARCHAR(255);2.插入数据:update Agent t1 inner join org_member t2 on t1.agent_
mysql 数据库时间字段时区问题
场景 项目中出现服务器时间正确,数据库时间正确,但是插入数据的时候时间出现时区问题,这边做下记录 `onWork_time` datetime DEFAULT NULL COMMENT '上班时间', `offWork_time` datetime DEFAULT NULL COMMENT '下班时间', onWork_time offWork_time 2018-11-29...
[转]修改字段长度应用会影响到生产性能
我们知道,在9i对数据库进行DDl操作在高并发时或数据量大时会影响DML操作,比如添加,删除字段时,必须等到DDL完成时,DML操作才开始 ,以下例子为高并发时测试修改字段长度严重影响到生产性能: session 1; [code=&quot;sql&quot;] C:\Documents and Settings\Paul Yi&gt;sqlplus &quot;/as sysdba&quot; SQL*Plus: R...
Apache2.4配置集群,Session粘连
在配置好服务器Apache2.4集群后,发现一个奇怪问题,账号登录后,容易发生闪退,分析错误日志后,发现是session粘连失败,经过仔细查看日志,发现是session域不同导致的,百度了一下,根据多篇Apache+tomcat的配置,整理了一个session粘连的配置方案,经过实测有效 首先,在httpd.coof启用模块 LoadModule headers_module modules/...
mysql追加数据
update test set content=CONCAT(content,&quot;123456&quot;) where title=&quot;'.$content['title'].'&quot;';
带粘连字符分割SVM算法分析图形处理
破解验证码论文以及源代码图形分割 带粘连字符分割 SVM算法分析图形处理 这个本人研究验证码多年收集整理的资料已经研究成果,其中包含大量源代码,已经可以直接使用的软件。同时对比较难得带 带粘连字符分割问题的解决上做出了分析。
MySQL卸载重安装异常解决
MySQL卸载说明: 1.关闭MySQL服务,任务管理器中的进程停止或者任务管理器中的服务中找到MySQL服务停止 2.删除MySQL文件,包括数据库数据存储文件,在完成后再搜索下盘符中是否还存在mysql文件,若存在继续删除 3.删除注册表 命令行中Dos:输入regedit,进入注册表、 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Servic
粘连字符的图片验证码
验证码在维护互联网安全、防止机器恶意攻击做出了很大贡献。但通过现有的模式识别技术仍然可以破解部分验证 码。着重于有粘连字符的猫扑和西祠胡同网站验证码进行识别,难点在于分割图片中的粘连字符。对字符是模糊粘连的猫扑验 证码,提出了基于局部极小值和最小投影值的方法来分割;对有交错粘连的西祠胡同验证码,通过颜色聚类与竖直投影结合来达 到分割字符的目的。最终均采用卷积神经网络进行训练和识别,达到了较高的识别率。
mySQL写入数据
标题mySQL写入数据标题mySQL数据写入
halcon 粘连物体分割
公众号:机器视觉那些事儿 “古人云,一生二,二生三,三生万物。古人有云,水之清则无敌。故名三清!” 此次选取的案例依然是官方Blob案例–基于欧式距离的分水岭算法的区域分割。Halcon的官方例程,都是顶级工程师的思想精华,大多实际项目的难度并没有官方例程复杂,由于官方例程针对的是有一定Halcon基础的,本人在此次处理时添加了详细的中文注释,做出一定的调整,更容易让读者理解和接受。 ...
【验证码分割识别】----- 一种基于前端预测识别的粘连字符分割方法
【验证码分割识别】一种基于前端预测识别的粘连字符分割方法 【验证码分割识别】一种基于前端预测识别的粘连字符分割方法
粘连细胞分割
该程序对粘连细胞分割效果比较好,运用了极限腐蚀和分水岭方法,算法简单易懂,非常适合初学者。
mysql 字段默认值设置不起作用
解决问题的办法都是由具体问题引起的。 先从问题开始,一个实体entity的int 字段score原来默认为0 ,现在想改为默认为100. 第一次解决尝试:  结果:成功  class entity{ private int score //省略下面的getter和setter方法 } 在new entity()后,score因为是int类型,所以 score=0; 所以
浅谈MMU在arm中的作用
mmu是Memory Management Unit的缩写,中文名是内存管理单元,既然它是内存管理单元,那么它是如何管理内存的呢?提示如何实现功能的呢?
HALCON图像处理的粘连零件颗粒计数
方法使用的是论文 基于HALCON图像处理的粘连零件颗粒计数方法研究 测试使用图片dev_clear_window() *读取图片 read_image (Image, 'C:/Users/Administrator/Desktop/new/QQ图片20161212193015.jpg') get_image_size (Image, Width, Height) *自动阈值分割 bin_thr
JPA @DynamicInsert()注解自动更新当前时间到MySQL数据库中
import lombok.Data; import org.hibernate.annotations.DynamicInsert; import org.hibernate.annotations.DynamicUpdate; import org.springframework.data.annotation.CreatedDate; import org.springframework...
matlab写的分水岭算法对粘连东西进行分割
用matlab实现的分水岭算法,能对粘连的东西进行分割,效果不错。。