关于服务器并发访问导致重复写数据库的问题

最近在做一个激活服务,客户端访问一个url,传递udid和packname两个字符串,服务器通过这两个字符串和mysql内的进行比较,如果都相同,则更新字段,否则作为一个新的字段插入。

判断逻辑我是这样写的:

if(ClientDao.getUser(cd.getUdid(),cd.getPkgname()) == null){
			//若数据库中没有唯一记录
			System.out.println("*************数据库中没有唯一记录**************");
			boolean result = ClientDao.creatClient(cd);
			System.out.println("******result*********** : "+result);
		}else{
			//若已经存在
			System.out.println("*************数据库中已经存在**************");
			ClientDao.updateClient(cd);
		}

各种getUser方法是这样的:

/**
	 * 获取唯一记录
	 * @param vendor
	 * @param udid
	 * @param pkgname
	 * @return
	 
	public static ClientData getUser(String udid,String pkgname){
		ClientData cd = null;
		Session session=SessionManager.newInstance().getSession();
		String sql="from ClientData c where c.udid=? and c.pkgname = ?";
		Transaction transaction = null;
		try {
			transaction=session.beginTransaction();
			Query query =session.createQuery(sql);
			query.setString(0, udid);
			query.setString(1, pkgname);
			cd=(ClientData)query.uniqueResult();
			if(transac
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值