jsp请求插入数据库 出现重复数据

先简要说下代码

index.jsp 嵌入如下代码

[code="java"]<% String info = DataBaseUtil.getPlayerInfo(userId); %>

[/code]

DataBaseUtil.java
[code="java"]
public class DataBaseUtil {

private static JdbcTemplate jdbcTemplate = (JdbcTemplate) ApplicationContext.getBean("jdbcTemplate");  

    public static void getPlayerInfo(String userId)  
{  
          if(hasExist(userId))//查找user,看是否存在相应userId的信息  
          {  
             dosomething();  

          }else  
          {  
             insertUser();  
             dosomething();  
          }  
    }  [/code]

说明:
user有个自增的主键,另有个user_id,应该是唯一的但我没有加唯一索引

有时会插入user_id重复的记录

加入同步块后问题依旧

[code="java"]
synchronized(userId)

{

if(hasExist(userId))//查找数据库,看是否存在相应userId的信息

{

dosomething();

          }else  
          {  
             insertUser();  
             dosomething();  
          }  

} [/code]

你可以把synchronized 提高到方法级别试试

你先看看 插入重复数据的原因,不要盲目加同步块。程序的同步和数据库的同步区别还是挺大的。你先说说什么时候会出现重复的?

我的意思是 userid是怎样插入进去的 插入进去的时候是不是会有重复情况。

你咋还不明白我的意思呢 你不是说数据库中userid有重复么,这个userid你是怎样生成的 在哪儿插入进去的 那段代码发出来

xn_sig_user 这个是页面上手动填写的 传过来的 是吗?假如是的话 我觉得你页面刷新后重复提交了 所以产生了两个结果

呵呵 不能用同步解决,用令牌来解决重复提交,网上有的 去看看

不行再留言吧 我qq上的人是满的

如果用oracle
那就用sequence产生序列号

其他数据库,也有办法产生序列号,就是麻烦些
如果实在不行
那就加唯一索引
否则产生重复数据麻烦

你debug一下,就知道了