开发中经常会用到如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();
}
不说太多了,还是自已慢慢看吧!