程式控制資料庫主鍵生成
阿新 • • 發佈:2019-02-19
主鍵的生成規則:日期(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