用SerialNumber生成流水号

 

 

在很多程序的应用中,有许多的地方会用到流水号,我写了个专门用来生成流水号的类

 

 

使用:

 

SerialNumber sn=new SerialNumber();
sn.getSerialNum(tablename, column);//tablename 表名
                                                           //column 主键字段(流水号列)
sn.toString(num, length); //将指定的数字格式化  如:

sn.toString(1,4); //结果为0001
 

 

下面是SerialNumber类的源代码

 

package com.aiy.util;

import java.text.SimpleDateFormat;
import java.util.Date;

import com.aiy.base.DatabaseUtil;

/**
 * 
 * @author aiyanbo 
 * 
 */
public class SerialNumber {
	private String prefix="SN";
	private String timeFormat="yyMMdd";
	private int digit=4;
	
	public SerialNumber() {}
	
    public SerialNumber(String prefix) {
		this.prefix = prefix;
	}
    
	public SerialNumber(String prefix, String timeFormat, int digit) {
		if(digit<2)
			digit=2;
		this.prefix = prefix;
		this.timeFormat = timeFormat;
		this.digit = digit;
	}

	public synchronized String getSerialNum(String tablename,String column){
    	SerialSource ins=setInstace(tablename, column);
    	String date=getDate();
    	if(ins==null){
    		return prefix+date+toString(1, digit);
    	}
    	int max=getMax(ins.getSn());
    	return prefix+date+toString(max, digit);
    }
    private SerialSource setInstace(String tablename,String column){
    	DatabaseUtil<SerialSource> db=new DatabaseUtil<SerialSource>(SerialSource.class);
    	String sql="select top 1 "+column+" sn from "+tablename+" where "+column+" like '"+(prefix+getDate())+"%' order by "+column+" desc";
    	return db.queryOne(sql);
    }
    
    private String getDate(){
    	SimpleDateFormat format=new SimpleDateFormat(timeFormat);
    	Date date=new Date();
    	return format.format(date);
    }
    private int getMax(String sn){
    	return Integer.parseInt(sn.substring((prefix+getDate()).length()))+1;
    }
    public String toString(int num,int length){
    	String str="";
    	String numlen=""+num;
    	for(int i=length-(numlen.length());i>0;i-- ){
    		str=str+"0";
    	}
    	return str+num;
    }
}

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值