用JAVA做售书的项目 数据库是SQlsever2005
销售单表单怎么样给每一张单自动给个单号?要求前两位是字母XH,然后是六位日期,然后是三位单号例:08年12月25日第一张销售单号为:XH081225001,第二张为:XH081225002
 而到了12月26日后开的第一张销售单号自动变为:XH081225001......

解决方案 »

  1.   

    ID号java代码生成,再保存到数据库,
    ID生成方法:XH+新系统日期+三位单号变量
    生成ID的时候,定义新旧日期变量,获取最新的系统日期,对比旧的系统日期,如果不等,则初始化三位单号变量为001;如果相等,三位单号+1.
    然后拼装即可。
      

  2.   

    说实话,算法是挺简单的,关键是要考虑并发的情况.
    如果你的程序只在一台机器上跑,那么以下代码应该能符合你的要求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));
    }
    }

    }
    如果程序是运行在分布式的系统中,我还不知道怎么办,以前这种情况我们只好用存储过程实现.