流水号连续生成的问题解决方法

  流水号连续生成的问题解决方法育龙网 WWW.CHINA-B.C0M 2009年08月26日 来源:互联网育龙网核心提示:
  解决方法
  方法一:采用最大号表的形式
  在数据库中创建一个表专门存放其他数据库的最大流水号,table_maxOrderID {table1_max,table2_max};
  在向数据库中插入数据的时候,首先想table_maxOrderId表查询到当前表的最大号,然后保存到数据库中。
  优点:效率高
  缺点:号码浪费大一些(例如保存的时候失败了,那么这个号码就浪费了。)
  方法二:采用抢号的形式
  这个不需要创建最大号表,在向数据库中保存数据的时候,获取当前表的最大流水号。例如:
  select max(ID) from tableName ; 让后将结果加一。
  优点:速度快,不浪费号码;
  缺点:并发的时候,号码重复造成数据无法保存。
  解决办法:抢号。如果保存失败,那么重复抢号例如: view plaincopy to clipboardprint? public synchronized String getOrderId(String shengid) { if (shengid == null .equals(shengid.trim())) { throw new NullPointerException(在获取流水号的时候,省id为空!获取流水号失败!); } // 首先查找所在地区查找企业表中有没有数据 int num = xjqyDao.getCountBySql( and qy_sheng=' + shengid + '); String orderId = null; if (num == 0) { orderId = 0001; } else { //必须找到本省最大的档案的id String maxDabh = xjqyDao.getMaxDabhBySheng(shengid); num = Integer.parseInt(maxDabh.substring(6)); String temp = (num + 1) + ; int LEN = temp.length(); if (LEN 4) { log.error(出错了!一个省的蚕茧收购加工企业的个数不能超过1万!); return null; } for (int i = 0; i 4 - LEN; i++) { temp = 0 + temp; } orderId = temp; } return orderId; } public synchronized String getOrderId(String shengid) { if (shengid == null .equals(shengid.trim())) { throw new NullPointerException(在获取流水号的时候,省id为空!获取流水号失败!); } // 首先查找所在地区查找企业表中有没有数据 int num = xjqyDao.getCountBySql( and qy_sheng=' + shengid + '); String orderId = null; if (num == 0) { orderId = 0001; } else { //必须找到本省最大的档案的id String maxDabh = xjqyDao.getMaxDabhBySheng(shengid); num = Integer.parseInt(maxDabh.substring(6)); String temp = (num + 1) + ; int LEN = temp.length(); if (LEN 4) { log.error(出错了!一个省的蚕茧收购加工企业的个数不能超过1万!); return null; } for (int i = 0; i 4 - LEN; i++) { temp = 0 + temp; } orderId = temp; } return orderId; } 小结:
  如果要从严格意义上生成连续的流水号,那么应该采用抢号的方法,同时限制用户不准删除记录,这样才能保证流水号的严格 连续,否则录入5条,删掉其中的2条,那么用户看到的记录的号码将无法连续了。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值