您的位置:首页 > 数据库

程序控制数据库主键生成

2015-05-19 22:37 225 查看
主键的生成规则:日期(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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息