数据库主键生成器java代码

本文介绍了一种基于数据库的键值生成器实现方法,通过维护一个键池来高效地为不同表分配唯一的键值。该方法减少了对数据库的频繁访问,提高了系统的性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.aspboy.base.database.util;

import java.util.HashMap;

public class KeyGenerator
{
 private static KeyGenerator keygen=new KeyGenerator();
 private static final int POOL_SIZE=20;
 private HashMap keylist=new HashMap(10);
 private KeyGenerator()
 {}
 
 public static KeyGenerator getInstance()
 {
  return keygen;
 }
 public synchronized int  getNextKey(String keyName)
 {
  KeyInfo keyinfo;
  if (keylist.containsKey(keyName))
  {
   keyinfo=(KeyInfo)keylist.get(keyName);
   System.out.println("key found");
  }
  else
  {
   keyinfo=new KeyInfo(POOL_SIZE,keyName);
   keylist.put(keyName, keyinfo);
   System.out.println("new key created");
  }
  return keyinfo.getNextKey();
 }
 

}

 

 

package com.aspboy.base.database.util;

import com.aspboy.base.database.DBBean;

public class KeyInfo
{
 private int keyMax;
 private int Keymin;
 private int nextKey;
 private int poolSize;
 private String keyName;
 //private int times ;
 
 public KeyInfo(int poolSize,String keyName)
 {
  this.poolSize=poolSize;
  this.keyName=keyName;
  loadFromDB();
  //times++;
  //System.out.println("get keyvalue from db tiems=="+times);
  
 }

 public int getKeyMax() {
  return keyMax;
 }

 public int getKeymin() {
  return Keymin;
 }
 
 private void loadFromDB()
 {
  String sql1="update tb_key set KeyValue=KeyValue+"+poolSize+" where keyName='"+keyName+"'";
  DBBean.executeSql(sql1);
  String sql2="select KeyValue from  tb_key  where keyName='"+keyName+"'";
  int keyFromDB=DBBean.getIntSingle(sql2);
  keyMax=keyFromDB;
  Keymin=keyFromDB-poolSize+1;
  nextKey=Keymin;
 }

 public int getNextKey() {
  
  if (nextKey>keyMax)
  {
   loadFromDB();
   System.out.println("get keyvalue from db");
   
  }
  return nextKey++;
 }
 
 

}

 

 

 

调用 方法: KeyGenerator.getInstance().getNextKey(keyName);

 

 

keyName 为表名称

 

 

相关数据库结构:

 

表tb_key

 

字段如下:

 

 KeyValue:pk大小

 

keyName:表名

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值