开发者社区> 问答> 正文

SSM中插入数据没有报错,但是数据库没有值?报错

运行代码后,数据库没有数据,手动插入数据后自增id直接跳过了前一个,这是什么原因啊?

展开
收起
爱吃鱼的程序员 2020-06-06 10:18:40 1606 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB
                        <p>mybatis默认开启事务不会自动提交,只有调用了commit才会提交事务。你这种情况明显是事务成功执行了,而且自增ID也已生效,但事务本身没有提交,请调用mybatis的commit方法提交事务!</p>
                    
    
                            回复 <a class="referer" target="_blank">@YonChun</a>  : 根本原因就是你没有提交事务,你看看autocommit和start transaction的关系和区别你就知道原因了,其实不用在sql中加别的东西,mybatis SqlSession直接commit就可以了。很可能你的mybatis禁用了自动提交,这个跟是否整合了spring没任何关系!
                        
    
                            回复 <a class="referer" target="_blank">@银杏卡卡</a>  : 似乎解决了,但是不知道原因,我在mysql里面 start transaction 了一下,然后把项目重新打包了一下,可以插入了
                        
    
                            回复 <a class="referer" target="_blank">@YonChun</a>  : mybatis默认不自动提交事务是有原因的,因为很多时候你开启一个事务做了好几个增删改的sql,如果每个增删改查都是一个事务,那么事务执行太频繁了。
                        
    
                            回复 <a class="referer" target="_blank">@YonChun</a>  : 不要按道理,你可以试试调用commit方法就知道了,增加一行代码,不费事的,找bug有时就得尝试。
                        
    
                            我整合了spring ,按道理来说spring会自定提交的
                        
    
                        你插入的时间字段少一个吧,应该是字段对应个数不对导致失败,无论成功还是失败了MySQL自增ID都会有影响,这是MySQL自增ID的原理问题
                    
    
                            不会啊,我指定了字段数目的,都能 一 一 对应,手动插入数据证明这段sql是正确的
                        
    
                        <p>如果数据库的服务器和应用的服务器是在不同的服务器,机器的日期时间如果有比较大的差异的情况,你插入数据的时候数据的创建时间你用NOW()使用的是数据库的机器时间。</p> 
    

    如果你做数据统计,可能会遇到蛋疼的BUG。

    所以我建议,不要使用NOW,统一使用 new Date()。

                            感谢您的建议
                        
    
                        <p>二选一:</p> 
    

    1:代码里配置事务

    2:mysql设置事务自动提交

    2020-06-06 10:18:54
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
DTCC 2022大会集锦《云原生一站式数据库技术与实践》 立即下载
阿里云瑶池数据库精要2022版 立即下载
2022 DTCC-阿里云一站式数据库上云最佳实践 立即下载