两个通用的产生一个编号字段的方案(Java)
以下是我写的方案,大家有什么其它好的方法吗?
- /*
- * 获取一个记录编号
- * 格式:12 位时间+业务编号+随即数
- * 例如:100330101028+04+893 (2010-03-30-10:20:28, 业务号是04, 随机数893 )
- *@param btype 业务类型编号 员工业务01 招聘业务02……
- *@return code 构造的一个记录编号
- */
- public static String getCode(String btype){
- //返回的code
- String code;
- //系统当前时间 12位
- SimpleDateFormat sdf=new SimpleDateFormat("yyMMddhhmmss");
- String nowDate=sdf.format(new java.util.Date());
- //随机数
- String iRandom = Math.round(Math.random()*900 )+100 +"";
- //整合一个code
- return nowDate+btype+iRandom;
- }
以下是另一种:
- /*
- * 获取一个记录编号
- * 由于不存在随机数相同的风险了,这是只要6位时间即可
- * 格式:6 位时间+业务编号+该业务的当天数量
- * 例如:100330+04+00003 (2010-03-30-10:20:28, 业务号是04, 当天这个业务是第3笔 )
- *@param btype 业务类型编号 员工业务01 招聘业务02……
- *@return code 构造的一个记录编号
- */
- public static String getCode(String btype){
- //返回的code
- String code;
- //系统当前时间 6位
- SimpleDateFormat sdf=new SimpleDateFormat("yyMMdd");
- String nowDate=sdf.format(new java.util.Date());
- //以上和方案1是一致的,但没有随机数了 换成了业务数量了
- String bamountStr = "";
- /*
- * 操作表BusinessToday
- * 找出当天对应btype的业务数量,加1后作为bamount,并且更新数据库,bamount字段++
- * 这个过程是用存储过程实现的,这是只是用伪代码表示
- */
- //Query Table BusinessToday, get the val of bamount and bdate
- SELECT bamount, bdate FROM businesstoday WHERE btype = '';
- //Check bdate is today?
- if(bdate == today)
- bamoutStr = ( bamount + 1) => String类型
- //today is another day, bdate != today
- //更新bdate字段,bamount置0
- else
- {
- UPDATE bamount =0;
- UPDATE bdate = today;
- bamoutStr = ( bamount + 1) => String类型
- }
- //整合一个code
- return nowDate+btype+bamountStr;
- }
附件中有这个的数据库设计