如何生成連續(xù)的流水號
當(dāng)前位置:點(diǎn)晴教程→知識管理交流
→『 技術(shù)文檔交流 』
工作中常常遇到流水號生成的問題,有的客戶要求流水號必須連續(xù),這個我們的開發(fā)工作提出了一個小難題。
解決方法如下: 方法一:采用最大號表的形式 在數(shù)據(jù)庫中創(chuàng)建一個表專門存放其他數(shù)據(jù)庫的最大流水號,table_maxOrderID {table1_max,table2_max}; 在向數(shù)據(jù)庫中插入數(shù)據(jù)的時候,首先想table_maxOrderId表查詢到當(dāng)前表的最大號加1,先更新最大號表,然后保存到業(yè)務(wù)數(shù)據(jù)。 優(yōu)點(diǎn):效率高 缺點(diǎn):號碼浪費(fèi)大一些(例如保存的時候失敗了,那么這個號碼就浪費(fèi)了。) 方法二:采用搶號的形式 這個不需要創(chuàng)建最大號表,在向數(shù)據(jù)庫中保存數(shù)據(jù)的時候,獲取當(dāng)前表的最大流水號。例如: select max(ID) from tableName ; 讓后將結(jié)果加一。 優(yōu)點(diǎn):速度快,不浪費(fèi)號碼; 缺點(diǎn):并發(fā)的時候,號碼重復(fù)造成數(shù)據(jù)無法保存。 解決辦法:搶號。如果保存失敗,那么重復(fù)搶號例如:
public synchronized String getOrderId(String shengid) { if (shengid == null ││ "".equals(shengid.trim())) { throw new NullPointerException("在獲取流水號的時候,省id為空!獲取流水號失??!"); } // 首先查找所在地區(qū)查找企業(yè)表中有沒有數(shù)據(jù) 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("出錯了!一個省的蠶繭收購加工企業(yè)的個數(shù)不能超過1萬!"); return null; } for (int i = 0; i < 4 - LEN; i++) { temp = "0" + temp; } orderId = temp; } return orderId; }
小結(jié): 該文章在 2011/3/3 17:09:10 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |