工作中常常遇到流水號生成的問題,有的客戶要求流水號必須連續,這個我們的開發工作提出了乙個小難題。
解決方法如下:
方法一:採用最大號表的形式
在資料庫中建立乙個表專門存放其他資料庫的最大流水號,table_maxorderid ;
在向資料庫中插入資料的時候,首先想table_maxorderid表查詢到當前表的最大號加1,先更新最大號表,然後儲存到業務資料。
優點:效率高
缺點:號碼浪費大一些(例如儲存的時候失敗了,那麼這個號碼就浪費了。)
方法二:採用搶號的形式
這個不需要建立最大號表,在向資料庫中儲存資料的時候,獲取當前表的最大流水號。例如:
select max(id) from tablename ; 讓後將結果加一。
優點:速度快,不浪費號碼;
缺點:併發的時候,號碼重複造成資料無法儲存。
解決辦法:搶號。如果儲存失敗,那麼重複搶號例如:
public synchronized string getorderid(string shengid)
// 首先查詢所在地區查詢企業表中有沒有資料
int num = xjqydao.getcountbysql(" and qy_sheng='" + shengid + "'");
string orderid = null;
if (num == 0) else
for (int i = 0; i < 4 - len; i++)
orderid = temp;
} return orderid;
}
for (int i = 0; i < 5; i++) else if (xjqy.getxian() == null
|| xjqy.getxian().equals("")) else
log.debug("企業編號為:" + code);
xjqy.setcode(code);
xjqydao.create(xjqy);
log.debug("create object");
flag = true;// 儲存成功!
break; // 退出迴圈
} catch (exception e)
}if (!flag)
小結:如果要從嚴格意義上生成連續的流水號,那麼應該採用搶號的方法,同時限制使用者不准刪除記錄,這樣才能保證流水號的嚴格 連續,否則錄入5條,刪掉其中的2條,那麼使用者看到的記錄的號碼將無法連續了。
SQL生成流水號
經過了幾次的測試終於成功了 declare year int,month int,day int,temp no varchar 12 needno varchar 4 no varchar 20 number varchar 50 randno varchar 50 nu varchar 10 s...
php生成流水號
function createn i else if i 100 else if i 1000 else echo substr 2012050010 0,6 echo createn 2 2 echo createn 9 9 echo createn 10 10 echo createn 11 1...
Oracle 生成流水號
輔助表 rul sequence 表中資料如圖 輔助儲存過程 proc getseqence create or replace procedure proc getseqence seqcode in varchar2,returnnum out varchar2,messagecode out ...