首页 > java笔记 > java流水号,java流水号生成规则,超过长度用字母

java流水号,java流水号生成规则,超过长度用字母

更新:

本文目录一览:

java怎么产生无重复的流水号!

希望对你有帮助!获取当前时间毫秒数,如果是单线程的话,一定无重复

一般这样在多线程并发中取到相同毫秒的概率都几乎为0,基本可以保证无重复

java 生成流水号为什么不使用sequence

sequence

是数据库级别的流水号

java生成流水号一般都用uuid生成32位的ID值,确保不会重复。

java实现自动生成流水号的方法?

public static String getOrderNo(){

long No = 0;

SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");

String nowdate = sdf.format(new Date());

No = Long.parseLong(nowdate)*1000;//这里如果一天订单多的话可以用一万或更大

No+=getNo();

return getUserId+No;

}

public static int getNo(){//返回当天的订单数+1

return 001;

}

public static String getUserId(){

return "123";

}

用System.out.print(getOrderNo());测试得到:12320060307001 一般订单号用这样还不错吧。呵呵

java怎样自动生成流水号

方法一:

   不用数据库的话弄个 static个变量,自己设置个synchronized

   示例:

import java.text.DecimalFormat;

import java.text.SimpleDateFormat;

import java.util.Date;

public class PrimaryGenerater {

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

    private static PrimaryGenerater primaryGenerater = null;

    private PrimaryGenerater() {

    }

    /**

     * 取得PrimaryGenerater的单例实现

     *

     * @return

     */

    public static PrimaryGenerater getInstance() {

        if (primaryGenerater == null) {

            synchronized (PrimaryGenerater.class) {

                if (primaryGenerater == null) {

                    primaryGenerater = new PrimaryGenerater();

                }

            }

        }

        return primaryGenerater;

    }

    /**

     * 生成下一个编号

     */

    public synchronized 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.substring(8, 12)));

        }

        return id;

    }

}

方法二:

 可以在数据库新建序列,再新建一个存储过程控制序列,返回序列值,比如sqlserver用identity,oracle用序列,存储过程可以加锁,当达到999999的时候重置序列,通过代码调用存储过程获得返回值。

2、全局变量。通过方法获取下一个值,方法同步。

java怎么自动生成订单流水号

看想要哪种类型的流水号

只要数字的,可以用

系统毫秒+用户id

生成

流水号,这能保证唯一(同一个用户同一毫秒只能发其一次流水号申请)

如果可以带字母的,就用java

自带的

生成uuid

类,生成一个


顶部