開發(fā)中經(jīng)常會用到如001,002,或者DOC001,DOC002之類的序號(俗稱的流水號)作為主鍵,實現(xiàn)
的方法不難,原理也是取得數(shù)據(jù)庫中最大的記錄然后進行加1操作,而取得最大記錄的方式應該有兩種,一種
是從數(shù)據(jù)庫中取得記錄集,然后用代碼去遍歷和判斷,不過這種方式感覺不太實際(^-^汗)!而另一種方式是
用sql語句直接取出最大的記錄!
呵呵!~還是不講太多廢話了,相信這些大家都知道!下面就共享一些主要用第二種方式來實現(xiàn)的源碼!
源碼:sequencenumber1.0_src.rar
jar包(^_^方便用):sequencenumber1.0.rar
不過只現(xiàn)在只支持mysql,sqlserver,access,oracle等四種數(shù)據(jù)庫(^_^因為偶也只用到這幾種數(shù)據(jù)庫)!不
過各位程序員們可自行擴展,原開發(fā)環(huán)境是eclipse3.2 + jdk1.5!
支持的格式有純數(shù)字(如:1、2),字符(如:001、002),序號頭 + 序號(如DOC001、DOC002),序號頭 + 日期 + 序號(如:DOC20070206001、DOC20070206002)
源碼中有測試的例子,如:
// test
public static void main(String[] args) throws Exception
{
// 不需要數(shù)據(jù)庫支持
SequenceNumber sn = new AccessSequenceNumber();
System.out.println( " general number: " + sn.getGeneralNumber( " DOC " ));
// 需要數(shù)據(jù)庫支持(以下測試部分需要Connection,請先根據(jù)數(shù)據(jù)庫類型取得連接對象,再進行測試^-^)
// 測試前先建立表:TEST;字段:TESTID:文本(30)
// 型式:sn = new AccessSequenceNumber(Connection對象)或sn.setConnection(Connection對象);
sn.setConnection(JdbcUtil.getConnection_Access());
// 注:getSequenceNumber_Number方法中如果字段的原始記錄存在非數(shù)字字符,例:'A12'、'f22',則會拋出字符到數(shù)字的轉換異常。
// 建議getSequenceNumber_Number與其它方法不要同時測試。
System.out.println( " sequencenumber number: " + sn.getSequenceNumber_Number( " TEST " , " TESTID " ));
System.out.println( " sequencenumber number: " + sn.getSequenceNumber_Number( " TEST " , " TESTID " , 10000 ));
// 測試下面時請最好先注釋上面兩句代碼,否則當數(shù)據(jù)庫存在非純數(shù)字記錄時會拋出異常。
// 建議一次只測試一個方法。
// System.out.println("sequencenumber number:" + sn.getSequenceNumber_String("TEST", "TESTID", null, 6));
// System.out.println("sequencenumber number:" + sn.getSequenceNumber_String("TEST", "TESTID", "DOC", 6));
// System.out.println("sequencenumber number:" + sn.getSequenceNumber_String("TEST", "TESTID", null, 6, 'A'));
// System.out.println("sequencenumber number:" + sn.getSequenceNumber_String("TEST", "TESTID", "DOC", 6, 'A'));
// System.out.println("sequencenumber number:" + sn.getSequenceNumber_Date("TEST", "TESTID", "DOC", 6));
// System.out.println("sequencenumber number:" + sn.getSequenceNumber_Date("TEST", "TESTID", null, 6));
// System.out.println("sequencenumber number:" + sn.getSequenceNumber_Date("TEST", "TESTID", "DOC", 6, 'A'));
// System.out.println("sequencenumber number:" + sn.getSequenceNumber_Date("TEST", "TESTID", null, 6, 'A'));
sn.close();
}
不說太多了,還是自已慢慢看吧!