1. 程式人生 > >程式控制資料庫主鍵生成

程式控制資料庫主鍵生成

主鍵的生成規則:日期(8)+型別(2)+序列(10)

第一個程式

/*
 *@(#)SequenceControl.java 2015年5月19日
 *
 *Copyright 2015 Cbo,All rights reserved.
 */
package com.test.primary.key.util;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

/**
 *序列控制
 *@author chebo
 *@date 2015年5月19日
 */
public class SequenceControl {

	/**
	 * 獲得主鍵
	 * @param str
	 * @return
	 * @throws Exception
	 */
	public List<String> getPrimaryKey(String str) throws Exception{
		Connection conn=DBConnection.getConnection();
		String sql="select * from cjb_bank_info where bank_no like ? order by bank_no desc";
		PreparedStatement ps=conn.prepareStatement(sql);
		ps.setString(1, str);
		ResultSet rs=ps.executeQuery();
		List<String> list=new ArrayList<String>();
		while(rs.next()){
			System.out.println("the result is:["+rs.getString(1)+"]");
			list.add(rs.getString(1));
		}
		rs.close();
		ps.close();
		conn.close();
		return list;
	}
	/**
	 * 獲取最大序列
	 * @param str
	 * @return
	 * @throws Exception
	 */
	public int getMaxSequence(String str) throws Exception{
		List<String> list=getPrimaryKey(str);
		if(null==list||0==list.size())
			return 0;
		String primaryKey=list.get(0);
		String sequence=primaryKey.substring(primaryKey.length()-10);
		int s=Integer.parseInt(sequence);
		return s;
		
	}
}

第二個程式如下
/*
 *@(#)PrimaryKeyControl.java 2015年5月19日
 *
 *Copyright 2015 Chebo,All rights reserved.
 */
package com.test.primary.key.assign;

import java.text.SimpleDateFormat;
import java.util.Date;

import com.test.primary.key.util.SequenceControl;

/**
 *程式控制資料庫主鍵
 *@author cdfdbo
 *@date 2015年5月19日
 */
public class PrimaryKeyControl {
	SequenceControl control=new SequenceControl();
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println(new PrimaryKeyControl().primaryKeyGenetor());
	}
	/**
	 * 主鍵生成器
	 * 生成規則:日期(8)+型別(2)+序列(10)
	 */
	public String primaryKeyGenetor(){
		StringBuilder sb=null;
		try{
			String date=getDate();
			sb=new StringBuilder(date);
			sb.append("00");//型別為“00”
			int sequence=control.getMaxSequence(sb.toString()+"%");
			String seq=String.format("%010d", sequence+1);
			sb.append(seq);
		}catch(Exception e){
			e.printStackTrace();
		}
		return sb.toString();
	}
	/**
	 * 獲取日期字串
	 * @return
	 */
	public String getDate(){
		Date date=new Date();
		SimpleDateFormat format=new SimpleDateFormat("yyyyMMdd");
//		format.parse("20120202")l
		return format.format(date);
	}
	

}
執行結果如下:
the result is:[20150519000000000003]
the result is:[20150519000000000002]
the result is:[20150519000000000001]
20150519000000000004
當資料中沒有原始結果時執行結果如下:

20150519000000000001