`
aiyanbo
  • 浏览: 65498 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

用SerialNumber生成流水号

    博客分类:
  • java
阅读更多

 

 

在很多程序的应用中,有许多的地方会用到流水号,我写了个专门用来生成流水号的类

 

 

使用:

 

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;
    }
}

 
分享到:
评论
7 楼 timshaw9791 2009-09-30  
流水号应该能定制的,这样搞有啥用。。。。
6 楼 lcllcl987 2009-09-30  
再次被雷倒了。
spring的不好用吗?
配一个:
maxValueIncrementer=org.springframework.jdbc.support.incrementer.MySQLMaxValueIncrementer
再配一个bean:
    <bean id="userIncrementer" class="${maxValueIncrementer}">
        <property name="dataSource" ref="dataSource"/>
        <property name="incrementerName" value="user_sequence"/>
        <property name="columnName" value="value"/>
    </bean>

人家的还有并发缓存控制。
5 楼 kaki 2009-09-30  
java.util.concurrent.atomic.AtomicLong
好用。学习了。
4 楼 whaosoft 2009-09-30  
mwmw 写道
其实很多系统都是整到纳秒级别,之后加随机数,毫秒级别的还是比较容易的,特别是在分布式的情况下。

不过现在好像生成的那个纳秒数都是有错的 !! 不知道 大家注意到没
3 楼 mwmw 2009-09-29  
其实很多系统都是整到纳秒级别,之后加随机数,毫秒级别的还是比较容易的,特别是在分布式的情况下。
2 楼 清晨阳光 2009-09-29  
我们系统的流水号是:yyyyMMdd-HHmmssSSS-XXXX,精确到毫秒,再加了4位随机数,这个若能重复,就碰墙去了。且从流水号可以看出操作时间
1 楼 star022 2009-09-29  
直接用 java.util.concurrent.atomic.AtomicLong生成流水号  也不错吧~~
如果不是分布式系统的话

相关推荐

    Serialnumber 生成类库 DLL

    《Serialnumber 生成类库 DLL 全面解析》 在软件开发中,序列号生成是一项重要的功能,用于软件授权和防止非法复制。本文将详细解析一个名为“Serialnumber 生成类库 DLL”的工具,该工具提供了高效且灵活的序列号...

    得到USB设备serial number

    一些开发环境对于多个USB设备(同时插入多个设备),通过serial number区别使用不同的USB设备。 得到USB设备VID和PID方法。插拔一次设备,执行如下命令。 $ sudo dmesg -c [ 3638.911666] usb 2-2.1: new full-speed ...

    JAVA生成订单号(日期+流水号)

    ### JAVA生成订单号(日期+流水号)的知识点解析 #### 一、概述 在现代电商及金融系统中,订单号作为唯一标识符扮演着极其重要的角色。它不仅需要具备唯一性,还要易于管理和追踪。本文将详细介绍一个通过Java语言...

    Lumion8.0 Pro Serial number reading tool

    Lumion8.0 Pro Serial number reading toolLumion8.0 Pro Serial number reading tool

    Get the hard disk serial number or Motherboard serial number in java

    这段代码使用了JNA库来访问Windows WMI服务,查询`Win32_BaseBoard`类的`SerialNumber`属性,从而获取主板序列号。 总的来说,获取硬盘和主板序列号在Java中需要根据具体的操作系统和可用的API来实现。在实际开发中...

    C# 获取硬盘序列号 SerialNumber;

    硬盘序列号(Serial Number)是每个硬盘制造商在生产时赋予的唯一标识符,用于区分不同的硬盘。本教程将详细介绍如何在C#中获取硬盘序列号。 首先,我们需要了解Windows操作系统提供的API(应用程序接口)函数,...

    SAP Serial Number Tables

    All SAP Serial Number Tables.

    二维码生成和业务流水号生成demo

    业务流水号(Business Transaction Serial Number)则是系统中用于唯一标识每一次业务操作的编号,它通常包含时间戳和其他随机或递增的元素,以确保唯一性和可追溯性。 在二维码生成方面,我们可以使用多种编程语言...

    Produced-four-serial-for-java.rar_four_java 生成流水_java四位流水号

    在给定的“Produced-four-serial-for-java.rar”压缩包中,包含了一个用于生成四位流水号的Java代码示例,其主要目标是生成从0001到XXXX的连续四位数字流水号。 生成流水号的方法有很多种,这里我们重点关注描述中...

    windows serial number

    serial number weishayidingyoa miaoshu a zhenshi kengdie hai de dayu 20zi

    Plsql Developer v7.0 + Serial Number

    "Serial Number"则是软件激活所必需的产品序列号,确保用户对软件的合法使用权。 在提供的描述中,".rar"文件格式表明压缩包使用RAR压缩算法,这是一种常见的文件压缩格式,用于将多个文件打包成一个文件以便于传输...

    HardDisk SerialNumber Changer 汉化版

    在使用 HardDisk SerialNumber Changer 之前,用户应确保已经备份了重要数据,因为任何对硬盘的修改都存在潜在风险。同时,了解相关法律法规,确保此类操作在合法范围内。虽然该软件提供了便利,但滥用或非法使用...

    使用 sim 卡SerialNumber判断省份

    ### 使用SIM卡SerialNumber判断省份 #### 一、概述 在移动通信领域,SIM卡(Subscriber Identity Module,用户身份模块)是一种存储用户信息的小型集成电路卡。为了方便管理和追踪,每张SIM卡都有一个唯一的Serial...

    Setup Factory v8.2.1.0 Serial Number For Win7

    Setup Factory v8.2.1.0 Serial Number For Win7

    获取指定USB设备的VID PID和SerialNumber

    VID代表Vendor ID,即厂商标识号,PID代表Product ID,即产品标识号,而SerialNumber代表设备的序列号。VID和PID共同构成了一个USB设备的唯一标识,通常用于软件层面识别设备。 在这段代码中,使用了Windows的Setup...

    modify id serial number

    可以修改PC机的逻辑盘的序列号。使用后,可以恢复。

    HTML5 builder Serial Number

    在探讨“HTML5 Builder Serial Number”这一主题时,首先需要明确的是,该串号(Serial Number: 3AFL-GB6DZ2-U7RXDD-DBHA)与HTML5 Builder软件产品有关。通常情况下,这样的序列号用于验证用户是否拥有使用特定软件...

    Changing volume's serial number

    标题“Changing volume's serial number”涉及的是操作系统中更改卷序列号的操作。卷序列号是每个磁盘分区的一个唯一标识符,通常由操作系统在创建卷时随机生成。在某些情况下,如系统恢复、数据隐私保护或者特定...

    一个实用的流水号编码类

    流水号(Sequential Number)通常是指按照特定顺序生成的一系列数字,它反映了数据的生成顺序,可以用来追踪记录,例如订单号、交易号等。流水号的设计通常不包含随机性,而是按照递增或递减的方式生成,确保每个新...

Global site tag (gtag.js) - Google Analytics