如何產生連續的流水號

來源:互聯網
上載者:User

工作中常常遇到流水號產生的問題,有的客戶要求流水號必須連續,這個我們的開發工作提出了一個小難題。

解決方案如下:

方法一:採用最大號表的形式

在資料庫中建立一個表專門存放其他資料庫的最大流水號,table_maxOrderID  {table1_max,table2_max};

在向資料庫中插入資料的時候,首先想table_maxOrderId表查詢到當前表的最大號加1,先更新最大號表,然後儲存到業務資料。

優點:效率高

缺點:號碼浪費大一些(例如儲存的時候失敗了,那麼這個號碼就浪費了。)

 

方法二:採用搶號的形式

這個不需要建立最大號表,在向資料庫中儲存資料的時候,擷取當前表的最大流水號。例如:

select max(ID) from tableName ;  讓後將結果加一。

優點:速度快,不浪費號碼;

缺點:並發的時候,號碼重複造成資料無法儲存。

解決辦法:搶號。如果儲存失敗,那麼重複搶號例如:

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 {//必須找到本省最大的檔案的idString 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;}
 
for (int i = 0; i < 5; i++) { // 連續搶號5次,如果失敗,請使用者稍後再試!try {String orderId = getOrderId(xjqy.getSheng());// 擷取連續的流水號log.debug("擷取到的連續的流水號為:" + orderId);String dabh = ""; // 檔案編號String code = ""; // 企業編號dabh = xjqy.getSheng() + xjqy.getJdrq().substring(0, 4)+ orderId;log.debug("檔案編號為:" + dabh);xjqy.setDabh(dabh);// 所在省做了js校正if (xjqy.getShi() == null || xjqy.getShi().equals("")) {// 如果市為空白code = xjqy.getSheng() + "0000" + xjqy.getLb()+ orderId;} else if (xjqy.getXian() == null|| xjqy.getXian().equals("")) {// 如果縣為空白code = xjqy.getShi() + "00" + xjqy.getLb() + orderId;} else {code = xjqy.getXian() + xjqy.getLb() + orderId;}log.debug("企業編號為:" + code);xjqy.setCode(code);xjqyDao.create(xjqy);log.debug("create object");flag = true;// 儲存成功!break; // 退出迴圈} catch (Exception e) {log.debug("儲存公司資訊出錯:", e);}}if (!flag) {throw new OurException("儲存失敗!請稍後重試!");}

小結:

如果要從嚴格意義上產生連續的流水號,那麼應該採用搶號的方法,同時限制使用者不準刪除記錄,這樣才能保證流水號的嚴格 連續,否則錄入5條,刪掉其中的2條,那麼使用者看到的記錄的號碼將無法連續了。

 

 

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.