java数据库唯一id生成工具类

 更新时间:2019年04月21日 15:37:03   作者:Tlimited  
这篇文章主要为大家详细介绍了java数据库唯一id生成工具类,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了java数据库唯一id生成工具类的具体代码,供大家参考,具体内容如下

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
import java.util.Random;
import java.util.UUID;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;

public class UniqueIdUtil
{
 private static long adjust = 1L;
 private static long nextId = 0L;
 private static long lastId = -1L;
 private static long randomLeng = 6L;
 private static JdbcTemplate jdbcTemplate;
 private static SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
 
 private static void init()
 {
  try
  {
   jdbcTemplate = (JdbcTemplate)AppUtil.getBean("jdbcTemplateSN");
   String str2 = AppConfigUtil.get("genId.adjust");
   if (str2 != null) {
    adjust = Integer.parseInt(str2);
   }
  }
  catch (Exception localException)
  {
   adjust = 1L;
   String str3 = AppConfigUtil.get("genId.adjust");
   if (str3 != null) {
    adjust = Integer.parseInt(str3);
   }
  }
 }
 
 private static void getNextIdBlock()
 {
  if (jdbcTemplate == null) {
   init();
  }
  Long localLong = Long.valueOf(-1L);
  Integer localInteger = Integer.valueOf(-1);
  String str1 = "SELECT bound,incremental FROM SYS_DB_ID T WHERE T.ID=?";
  String str2 = "UPDATE SYS_DB_ID SET BOUND=? WHERE ID=?";
  try
  {
   Map localMap = jdbcTemplate.queryForMap(str1, new Object[] { Long.valueOf(adjust) });
   localLong = Long.valueOf(Long.parseLong(localMap.get("bound").toString()));
   localInteger = Integer.valueOf(Integer.parseInt(localMap.get("incremental").toString()));
   nextId = localLong.longValue();
   lastId = localLong.longValue() + localInteger.intValue();
   jdbcTemplate.update(str2, new Object[] { Long.valueOf(lastId), Long.valueOf(adjust) });
  }
  catch (EmptyResultDataAccessException localEmptyResultDataAccessException)
  {
   insertNewComputer();
  }
 }
 
 private static void insertNewComputer()
 {
  try
  {
   lastId = 10000L;
   String str = "INSERT INTO SYS_DB_ID (id,incremental,bound) VALUES(" + adjust + ",10000," + lastId + ")";
   jdbcTemplate.update(str);
  }
  catch (Exception localException)
  {
   localException.printStackTrace();
  }
 }
 
 public static synchronized long genId()
 {
  if (lastId <= nextId) {
   getNextIdBlock();
  }
  long l = nextId++;
  return l + adjust * 10000000000000L;
 }
 
 public static final String getGuid()
 {
  UUID localUUID = UUID.randomUUID();
  return localUUID.toString();
 }
 
 public static final String getRandom()
 {
  Random localRandom = new Random();
  String str1 = "";
  for (int i = 0; i < randomLeng; i++)
  {
   String str2 = String.valueOf(localRandom.nextInt(10));
   str1 = str1 + str2;
  }
  return str1;
 }
 
 public static String genOrderNo()
 {
  long l = genId();
  String str = dateFormat.format(new Date());
  return str + l;
 }
 
 public static void main(String[] paramArrayOfString)
  throws Exception
 {}
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Java深度优先遍历解决排列组合问题详解

    Java深度优先遍历解决排列组合问题详解

    这篇文章主要介绍了Java深度优先遍历解决排列组合问题详解,深度优先搜索是递归过程,带有回退操作,因此需要使用栈存储访问的路径信息,当访问到的当前顶点没有可以前进的邻接顶点时,需要进行出栈操作,将当前位置回退至出栈元素位置,需要的朋友可以参考下
    2024-01-01
  • MAVEN的安装配置与IDEA整合超详细教程

    MAVEN的安装配置与IDEA整合超详细教程

    这篇文章给大家介绍了MAVEN的安装,配置与IDEA整合方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,感兴趣的朋友跟随小编一起看看吧
    2021-02-02
  • 详解Java并发编程基础之volatile

    详解Java并发编程基础之volatile

    volatile作为Java多线程中轻量级的同步措施,保证了多线程环境中“共享变量”的可见性。这里的可见性简单而言可以理解为当一个线程修改了一个共享变量的时候,另外的线程能够读到这个修改的值。本文将详解介绍Java并发编程基础之volatile
    2021-06-06
  • Java多线程实现之Callable详解

    Java多线程实现之Callable详解

    这篇文章主要介绍了Java多线程实现之Callable详解,Callable是一个接口,用于实现多线程,与实现Runnable类似,但是功能更强大,通过实现Callable接口,我们需要重写call()方法,该方法可以在任务结束后提供一个返回值,需要的朋友可以参考下
    2023-08-08
  • 在service层注入mapper时报空指针的解决

    在service层注入mapper时报空指针的解决

    这篇文章主要介绍了在service层注入mapper时报空指针的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • SpringBoot整合kafka遇到的版本不对应问题及解决

    SpringBoot整合kafka遇到的版本不对应问题及解决

    这篇文章主要介绍了SpringBoot整合kafka遇到的版本不对应问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • SpringBoot中的内容协商器图解

    SpringBoot中的内容协商器图解

    本文通过图文解说加代码的形式给大家介绍了SpringBoot中的内容协商器知识,需要的朋友参考下吧
    2017-11-11
  • springboot中报错Invalid character found in the request的解决

    springboot中报错Invalid character found in 

    这篇文章主要介绍了springboot中报错Invalid character found in the request的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • 基于@PostConstruct注解的使用,解决向静态变量注入值

    基于@PostConstruct注解的使用,解决向静态变量注入值

    这篇文章主要介绍了基于@PostConstruct注解的使用,解决向静态变量注入值问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • idea启动与jar包启动中使用resource资源文件路径的问题

    idea启动与jar包启动中使用resource资源文件路径的问题

    这篇文章主要介绍了idea启动与jar包启动中使用resource资源文件路径的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07

最新评论