日期:2014-05-19  浏览次数:20844 次

多人同时注册出现记录相同的问题
如果有多个人同时注册(同一个时间点。精确到秒),那么在这个时间点上的记录会出现相同的记录,在注册的Action有一个成员变量来接收JSP页面传递来的注册信息,但是在向数据库提交之前都已验证过该记录是否已存在,可是现在数据库中还是有相同的数据,这个有几方面原因,求大神相助!

------解决方案--------------------
后台注册的那个service的方法需要同步
------解决方案--------------------
你是指的ID相同吧。同一时间注册。你的ID取的当前时间所以导致ID相同吧。
你校验没用的原因应该是因为相同的数据是在你校验完以后加入的。
你可以在每个用户注册完成后。
让系统等待几毫秒再插下一个用户
Thread.sleep(20);
------解决方案--------------------
因为多线程情况下,先去判断然后再写可能会存在大家都去判断了当前不存在,然后就一起去写,所以就可能出现相同是数据
------解决方案--------------------
每次插入的时候 先把数据库的最新时间拿出来对比下 再插入
------解决方案--------------------
最好使用单例的方式
------解决方案--------------------
每次插入的时候 先把数据库的最新时间拿出来对比下 再插入
------解决方案--------------------
同时注册时最好这个方法是synchronized让后来的先排队。
------解决方案--------------------
什么叫做:相同的记录?哪些东西相同了?不能在数据库中设置 Unique Index 么?
------解决方案--------------------
1.提高时间精度
2.如果用时间精确到秒,不防在加个自增序列 然后用时间序列 + 该序列,就是你要插入的id。
------解决方案--------------------
你的验证,单线程情况下是可以的。
多线程情况下,是不起作用的。
应该是注册用户信息表的标识符会重复的问题。

给生成用户唯一标识符uuid加synchronized同步,这样uuid在多线程下是不会重复的。
------解决方案--------------------
要不楼主自己写一个主键生成的方法
调用自己的 主键生成方法
------解决方案--------------------
要不楼主自己写一个主键生成的方法
调用自己的 主键生成方法
------解决方案--------------------
如果你使用spring 时,会有这样的问题。spring 默认bean 配置是一个single ..也就是所有的请求都会便用这一个对象。你需要把这个改成 scope="prototype"
------解决方案--------------------
用数据库解决,唯一键,锁什么的
------解决方案--------------------
LZ说的重复应该是用户录入内容的重复了,比如A录入“中国银行”,B也同时录入“中国银行”,由于之前A、B都没保存,所以在前台检验时就通过,这时再提交到后台,就会出现重复了,虽然说两人的录入基本上是同时的,但服务器处理起来还是会有先后顺序的,建议在后台保存的时候也加一个验证做判断,在保存记录前先判断是否有重复的,如果有,就做异常处理或给用户提示。
------解决方案--------------------
最原始的方法是自己写一个随便号码生成,就像QQ一样
------解决方案--------------------
楼主最简单的方法是在表中增加这些字段的唯一性约束。即使当时前台校验都通过,但是实际插入数据库中时还是有先后顺序的,后插入的就会插入不成功。
------解决方案--------------------
我的解决方法是 本地生成PK, insert时一起插入进去,用的UUID. 

java.util.UUID
------解决方案--------------------
探讨

什么叫做:相同的记录?哪些东西相同了?不能在数据库中设置 Unique Index 么?