java數(shù)據(jù)庫(kù)唯一id生成工具類(lèi)
本文實(shí)例為大家分享了java數(shù)據(jù)庫(kù)唯一id生成工具類(lèi)的具體代碼,供大家參考,具體內(nèi)容如下
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
{}
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java深度優(yōu)先遍歷解決排列組合問(wèn)題詳解
這篇文章主要介紹了Java深度優(yōu)先遍歷解決排列組合問(wèn)題詳解,深度優(yōu)先搜索是遞歸過(guò)程,帶有回退操作,因此需要使用棧存儲(chǔ)訪問(wèn)的路徑信息,當(dāng)訪問(wèn)到的當(dāng)前頂點(diǎn)沒(méi)有可以前進(jìn)的鄰接頂點(diǎn)時(shí),需要進(jìn)行出棧操作,將當(dāng)前位置回退至出棧元素位置,需要的朋友可以參考下2024-01-01
詳解Java并發(fā)編程基礎(chǔ)之volatile
volatile作為Java多線程中輕量級(jí)的同步措施,保證了多線程環(huán)境中“共享變量”的可見(jiàn)性。這里的可見(jiàn)性簡(jiǎn)單而言可以理解為當(dāng)一個(gè)線程修改了一個(gè)共享變量的時(shí)候,另外的線程能夠讀到這個(gè)修改的值。本文將詳解介紹Java并發(fā)編程基礎(chǔ)之volatile2021-06-06
Java多線程實(shí)現(xiàn)之Callable詳解
這篇文章主要介紹了Java多線程實(shí)現(xiàn)之Callable詳解,Callable是一個(gè)接口,用于實(shí)現(xiàn)多線程,與實(shí)現(xiàn)Runnable類(lèi)似,但是功能更強(qiáng)大,通過(guò)實(shí)現(xiàn)Callable接口,我們需要重寫(xiě)call()方法,該方法可以在任務(wù)結(jié)束后提供一個(gè)返回值,需要的朋友可以參考下2023-08-08
在service層注入mapper時(shí)報(bào)空指針的解決
這篇文章主要介紹了在service層注入mapper時(shí)報(bào)空指針的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06
SpringBoot整合kafka遇到的版本不對(duì)應(yīng)問(wèn)題及解決
這篇文章主要介紹了SpringBoot整合kafka遇到的版本不對(duì)應(yīng)問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03
springboot中報(bào)錯(cuò)Invalid character found in
這篇文章主要介紹了springboot中報(bào)錯(cuò)Invalid character found in the request的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09
基于@PostConstruct注解的使用,解決向靜態(tài)變量注入值
這篇文章主要介紹了基于@PostConstruct注解的使用,解決向靜態(tài)變量注入值問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09
idea啟動(dòng)與jar包啟動(dòng)中使用resource資源文件路徑的問(wèn)題
這篇文章主要介紹了idea啟動(dòng)與jar包啟動(dòng)中使用resource資源文件路徑的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07

