先简要说下代码
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一下,就知道了