用JAVA做售书的项目 数据库是SQlsever2005
销售单表单怎么样给每一张单自动给个单号?要求前两位是字母XH,然后是六位日期,然后是三位单号例:08年12月25日第一张销售单号为:XH081225001,第二张为:XH081225002
而到了12月26日后开的第一张销售单号自动变为:XH081225001......
销售单表单怎么样给每一张单自动给个单号?要求前两位是字母XH,然后是六位日期,然后是三位单号例:08年12月25日第一张销售单号为:XH081225001,第二张为:XH081225002
而到了12月26日后开的第一张销售单号自动变为:XH081225001......
ID生成方法:XH+新系统日期+三位单号变量
生成ID的时候,定义新旧日期变量,获取最新的系统日期,对比旧的系统日期,如果不等,则初始化三位单号变量为001;如果相等,三位单号+1.
然后拼装即可。
如果你的程序只在一台机器上跑,那么以下代码应该能符合你的要求public class IdCreater {
private static final String DATA_FORMAT="yyMMdd";
private static final String HEAD="XH";
private static int lastDay=0;//最近的一次日期是几号
private static int lastNo=0;//最近一次的获得的数
synchronized public static String getNewId(int testNo){
Date date=new Date();
// 以下两行是测试代码,假设没隔1小时取一次,
// long no=date.getTime()+1000*60*60*testNo;
// date=new Date(no);
SimpleDateFormat sdf=new SimpleDateFormat(DATA_FORMAT);
String datStr=sdf.format(date);
int today=sdf.getCalendar().get(Calendar.DAY_OF_MONTH);
if(today==lastDay){
lastNo++;
}else{
lastNo=1;
lastDay=today;
}
if(lastNo<10){
return HEAD+datStr+"00"+lastNo;
}else if(lastNo<100){
return HEAD+datStr+"0"+lastNo;
}else if(lastNo<1000){
return HEAD+datStr+lastNo;
}else {
return HEAD+datStr+lastNo;
}
}
public static void main(String[] args) throws ParseException, InterruptedException {
for (int i = 0; i <100; i++) {
System.out.println(getNewId(i));
}
}
}
如果程序是运行在分布式的系统中,我还不知道怎么办,以前这种情况我们只好用存储过程实现.