程序控制数据库主键生成
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
第一个程序
/*
*@(#)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
相关文章推荐
- window.open() 生成弹出窗口的 参数列表
- 水一个:组合数学生成作业的程序,算法很垃圾,有兴趣的帮我改一下啊
- ibatis - 自动代码生成工具abator 使用介绍
- 用Python生成目录树
- 利用免费服务生成QR二维码
- 生成sprite动画对象的方法
- 数组生成的所有集合
- hibernate 主键生成策略介绍
- cxf wsdl2java代码生成
- java生成图片缩略图
- ruby 生成随机数,随机字母的方法
- HDU 1102 Constructing Roads 最小生成树
- asp.net生成简单验证码
- 微信生成二维码
- xcode自动生成project-swift.h出错
- hiho 26 最小生成树 prime
- EXCEL2010打开phpexcel生成的excel时,显示文件已损坏,无法打开
- 使用zxing生成二维码
- Cocos2d-x 3.x 生成和加载plist文件
- ActiveMQ使用spring JmsTemplate生成和订阅消息(二)