在很多程序的应用中,有许多的地方会用到流水号,我写了个专门用来生成流水号的类
使用:
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;
}
}