如何生成連續的流水號
當前位置:點晴教程→知識管理交流
→『 技術文檔交流 』
工作中常常遇到流水號生成的問題,有的客戶要求流水號必須連續,這個我們的開發工作提出了一個小難題。
解決方法如下: 方法一:采用最大號表的形式 在數據庫中創建一個表專門存放其他數據庫的最大流水號,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 { //必須找到本省最大的檔案的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; }
小結: 該文章在 2011/3/3 17:09:10 編輯過 |
關鍵字查詢
相關文章
正在查詢... |