zoukankan      html  css  js  c++  java
  • 浅谈自动产生流水号的几种方式

     项目中都会用到编号或者编码。生成编码需要一定格式,但这个不是难点,主要的难点在于如何控制编码不重复。

    先贴一段生成流水号的代码

    package com.ra.testClass;
    import java.text.DecimalFormat;
    import java.text.SimpleDateFormat;
    import java.util.Date;

    public class Test2 {

    private static final String SERIAL_NUMBER = "XXXX"; // 流水号格式
    private static Test2 primaryGenerater = null;

    private Test2() {
    }

    /**
    * 取得PrimaryGenerater的单例实现
    *
    * @return
    */
    public static Test2 getInstance() {
    if (primaryGenerater == null) {
    synchronized (Test2.class) {
    if (primaryGenerater == null) {
    primaryGenerater = new Test2();
    }
    }
    }
    return primaryGenerater;
    }

    public static void main(String[] args){
    System.out.println(generaterNextNumber("1"));
    }

    /**
    * 生成下一个编号
    */
    public synchronized static String generaterNextNumber(String sno) {
    String id = null;
    Date date = new Date();
    SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd");
    if (sno == null) {
    id = formatter.format(date) + "0001";
    } else {
    int count = SERIAL_NUMBER.length();
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < count; i++) {
    sb.append("0");
    }
    DecimalFormat df = new DecimalFormat("0000");
    id = formatter.format(date)
    + df.format(1 + Integer.parseInt(sno));
    }
    return id;
    }
    }

    这种方式不能保证编码的唯一性,下面介绍两种能保证编码唯一性的方式

      (1)项目中新建文件CommonSerialNumber.csn ,内容随意给一个值,比如:1001

    public String getDangerGoodsCommonBH(String typeCode){
    String bh = "";
    if(StringUtils.isNotBlank(typeCode)){
    String filename = getClass().getClassLoader().getResource("/")
    .getPath()+ "CommonSerialNumber.csn";
    File file = new File(filename);
    if (file.exists() && file.isFile()) {
    SimpleDateFormat sdf = new SimpleDateFormat("yyMMdd");
    String middleCode = sdf.format(new Date());
    List<String> list = FileUtil.readList(file);
    String[] data = list.get(0).split(",");
    int num = Integer.parseInt(data[0]);
    FileUtil.rewrite(file, String.valueOf((num + 1)));
    bh = typeCode+middleCode+num;
    }
    }
    return bh;
    }

    (2)参考第一段代码,从数据库取出该表的最大编号值,截取后几位 +1即可

  • 相关阅读:
    C# 对Outlook2010进行二次开发
    利用AForge.NET 调用电脑摄像头进行拍照
    SQL2012 提示评估已过期 解决方案- sql server问题
    图片转换PDF
    [转载]理解weight decay
    ATTENTION NETWORK分析
    sys.stdout.write和print和sys.stdout.flush
    Flutter免费(视频)教程汇总
    Windows核心编程随笔
    .NET家族
  • 原文地址:https://www.cnblogs.com/huideng/p/4494122.html
Copyright © 2011-2022 走看看