java实现数据库序号(流水号)

开发中经常会用到如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();
	} 

不说太多了,还是自已慢慢看吧!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值