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