`
aiyanbo
  • 浏览: 65853 次
  • 性别: 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生成流水号  也不错吧~~
如果不是分布式系统的话

相关推荐

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

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

    一个实用的流水号编码类

    从描述中可以看出,这个编码类可能是为VC6.0(Visual C++ 6.0)开发的一个C++类库,用于生成流水号和序列号。VC6.0是一款经典的微软开发环境,支持C++语言,该编码类可能包含了适用于C++编程的接口和方法,方便...

    MTK平台SN写号工具

    MTK平台SN写号工具是针对MediaTek(联发科)处理器平台设计的一款专用软件,主要用于在测试和生产阶段为设备编写唯一序列号(Serial Number,简称SN)。这个工具的出现极大地方便了制造商和工程师对MTK平台手机或...

    autoid:适用于Drupal 7的自动ID模块

    #Auto ID A Drupal module for generating datetime-based serial numbers, for example SALES201502280001. ##Usage Install the module, Then you can find configuration link in admin/...用于生成流水号(例如

    (2021-2022年收藏)夜猫商务会所运营管理平台数据库结构说明书要点.doc

    - **CardRecords** 表:此表可能包含了会员卡的相关信息,如`CardID`(卡片ID)、`TradingType`(交易类型)、`TradingMoney`(交易金额)、`TradingDate`(交易日期)、`SerialNumber`(序列号)等。这些字段用于...

    计算机术语大全(中英对照)

    通过分析过往的分支模式,BHT能够预测当前分支指令的结果,从而提高流水线效率和程序执行速度。 #### 6. BPU (分支处理单元) **中文名称:** 分支处理单元 **英文全称:** Branch Processing Unit **定义:** BPU...

Global site tag (gtag.js) - Google Analytics