java mysql 并发更新数据_java 如何并发更新数据库同一条数据

在做压力测试时有一个操作 取数据库表中的某个数值,取到后+1 ,该方法已经做了锁表操作 但是取的数不知道为什么重复了代码如下 请问该如何处理

public synchronized String getMaxNo(String codeType, String numLimit,int step){

return CreateMaxNo(codeType,numLimit,step);

}

private  String CreateMaxNo(String codeType, String numLimit,

int step) {

NumManage manage = new NumManage();

String strMaxNo = null;

manage = (NumManage) hibernateBasedDao.get(NumManage.class, codeType);

System.out.println("manage" + manage);

if (manage == null) {

NumManage nummanage = new NumManage();

nummanage.setCodeType(codeType);

strMaxNo = leftPad("1", "0", numLimit.length() - 1);

nummanage.setNum(strMaxNo);

hibernateBasedDao.save(nummanage);

} else {

int maxNo = Integer.valueOf(manage.getNum()).intValue() + step;

if (maxNo >= Integer.valueOf(numLimit).intValue()) {

maxNo = 1;

}

manage.setNum(leftPad(String.valueOf(maxNo), "0",

numLimit.length() - 1));

hibernateBasedDao.getHibernateTemplate().update(manage,

LockMode.UPGRADE);

NumManage newManage = (NumManage) hibernateBasedDao.get(

NumManage.class, codeType);

strMaxNo = newManage.getNum();

}

return strMaxNo;

}

public static String leftPad(String sourString, String cChar, int cLen) {

String tReturn = "";

try {

int tLen = sourString.length();

int i, iMax;

if (tLen >= cLen)

return sourString;

iMax = cLen - tLen;

for (i = 0; i < iMax; i++) {

tReturn = cChar + tReturn;

}

tReturn = tReturn + sourString.trim();

} catch (Exception e) {

}

return tReturn;

}

2010年8月30日 11:25

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值