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