導航:首頁 > 編程語言 > java生成唯一的id

java生成唯一的id

發布時間:2023-08-13 17:34:26

❶ 用java獲得機器的唯一號

一、上Google搜一下Mac及CPU ID的C代碼
二、上java.sun.com找那個JNI的指南
三、你用二的方法把一的代碼給包一下。

其實利用在java中的runtime來執行在win裡面的ipconfig -all的命令可以實現的!!

java.lang.Process proc = Runtime.getRuntime().exec("ipconfig /all");
InputStream istr = proc.getInputStream();
byte[] data = new byte[1024];
istr.read(data);
netdata = new String(data);

分析其中的netdata就是那!,有關cpu的可以類同實現!

❷ java程序需要ID資料庫文件,如何在資料庫中建立ID

首先連接到資料庫,我的是SQL
String name="sa";//資料庫賬戶
String password="123456";//密碼
//載入驅動
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
}catch(ClassNotFoundException e){
e.printStackTrace();
}
try{
connection=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName=OrganizationManagementSystem",name,password);//連接
}catch (SQLException e) {
e.printStackTrace();
}
然後建個數據表,在這里就可以建立ID欄位了

PreparedStatement stmt;
String formName="name";//表名

String style="ID int Identity";//id列,Identity 是設置自增
try {
stmt =connection.prepareStatement("create table "+formName+"("+style+")");
stmt.execute();
} catch (SQLException e) {
e.printStackTrace();

}

❸ java里往資料庫里加數據 之後自動生成一個序號 唯一不重復 生成規則為 資料庫中某一欄位+00001

兩種解決方案 ,其實有點類似於ID
1、在資料庫加一列,在的程序里寫自己寫方法處理,然後插入
2、在數據里寫函數,寫一個觸發器

❹ JAVA JDK提供的一個自動生成主鍵 UUID.randomUUID()的方法 它永遠都不會重復嘛

關於是否重復,首先要說一下uuid生成的原理
UUID是指在一台機器上生成的數字,它保證對在同一時空中的所有機器都是唯一的
UUID由以下幾部分的組合:
(1)當前日期和時間,UUID的第一個部分與時間有關,如果你在生成一個UUID之後,過幾秒又生成一個UUID,則第一個部分不同,其餘相同。
(2)時鍾序列。
(3)全局唯一的IEEE機器識別號,如果有網卡,從網卡MAC地址獲得,沒有網卡以其他方式獲得。
通過組成可以看出,首先每台機器的mac地址是不一樣的,那麼如果出現重復,可能是同一時間下生成的id可能相同,不會存在不同時間內生成重復的數據
至於說同一時間產生重復的數據,就目前來說,是不會的除非極高的高並發(如果發生了,也可以通過原子性操作避免),
所以基本上就認為不會重復好了

❺ 什麼是UUID,Java中怎麼產生UUID

UUID含義是通用唯一識別碼 (Universally Unique Identifier),這 是一個軟體建構的標准,也是被開源軟體基金會 (Open Software Foundation, OSF) 的組織應用在分布式計算環境(Distributed Computing Environment, DCE) 領域的一部分。


UUID 的目的,是讓分布式系統中的所有元素,都能有唯一的辨識資訊,而不需要透過中央控制端來做辨識資訊的指定。如此一來,每個人都可以建立不與其它人沖突的 UUID。在這樣的情況下,就不需考慮資料庫建立時的名稱重復問題。目前最廣泛應用的 UUID,即是微軟的 Microsoft's Globally Unique Identifiers (GUIDs),而其他重要的應用,則有 Linux ext2/ext3 檔案系統、LUKS 加密分割區、GNOME、KDE、Mac OS X 等等。


UUID是指在一台機器上生成的數字,它保證對在同一時空中的所有機器都是唯一的。通常平台會提供生成的API。

//如果使用的JDK1.5的話,那麼生成UUID變成了一件簡單的事,以為JDK實現了UUID:
java.util.UUID,直接調用即可.
UUIDuuid=UUID.randomUUID();
Strings=UUID.randomUUID().toString();//用來生成資料庫的主鍵id非常不錯。。

//UUID是由一個十六位的數字組成,表現出來的形式例如
//550E8400-E29B-11D4-A716-446655440000

❻ java生成唯一ID

讓資料庫自動生成把
mysql
把Id設置為auto_increment
oracle
生成一個序列.sequence
java可以通過UUID這個類生成一個唯一的Id但不是你想的那樣

❼ 如何保證資料庫集群中id的唯一性,假設每秒鍾並發20萬次

用雪花演算法的工具類,1秒內可以生成26萬不重復的值,資料庫的主鍵不要自增,手動設置

packageentity;

importjava.lang.management.ManagementFactory;
importjava.net.InetAddress;
importjava.net.NetworkInterface;

/**
*<p>名稱:IdWorker.java</p>
*<p>描述:分布式自增長ID</p>
*<pre>
*Twitter的SnowflakeJAVA實現方案
*</pre>
*核心代碼為其IdWorker這個類實現,其原理結構如下,我分別用一個0表示一位,用—分割開部分的作用:
*1||0------00000---00000---000000000000
*在上面的字元串中,第一位為未使用(實際上也可作為long的符號位),接下來的41位為毫秒級時間,
*然後5位datacenter標識位,5位機器ID(並不算標識符,實際是為線程標識),
*然後12位該毫秒內的當前毫秒內的計數,加起來剛好64位,為一個Long型。
*這樣的好處是,整體上按照時間自增排序,並且整個分布式系統內不會產生ID碰撞(由datacenter和機器ID作區分),
*並且效率較高,經測試,snowflake每秒能夠產生26萬ID左右,完全滿足需要。
*<p>
*64位ID(42(毫秒)+5(機器ID)+5(業務編碼)+12(重復累加))
*
*@authorPolim
*/
publicclassIdWorker{
//時間起始標記點,作為基準,一般取系統的最近時間(一旦確定不能變動)
privatefinalstaticlongtwepoch=1288834974657L;
//機器標識位數
=5L;
//數據中心標識位數
=5L;
//機器ID最大值
=-1L^(-1L<<workerIdBits);
//數據中心ID最大值
=-1L^(-1L<<datacenterIdBits);
//毫秒內自增位
=12L;
//機器ID偏左移12位
=sequenceBits;
//數據中心ID左移17位
=sequenceBits+workerIdBits;
//時間毫秒左移22位
=sequenceBits+workerIdBits+datacenterIdBits;

=-1L^(-1L<<sequenceBits);
/*上次生產id時間戳*/
=-1L;
//0,並發控制
privatelongsequence=0L;

privatefinallongworkerId;
//數據標識id部分
privatefinallongdatacenterId;

publicIdWorker(){
this.datacenterId=getDatacenterId(maxDatacenterId);
this.workerId=getMaxWorkerId(datacenterId,maxWorkerId);
}
/**
*@paramworkerId
*工作機器ID
*@paramdatacenterId
*序列號
*/
publicIdWorker(longworkerId,longdatacenterId){
if(workerId>maxWorkerId||workerId<0){
(String.format("workerIdcan'tbegreaterthan%dorlessthan0",maxWorkerId));
}
if(datacenterId>maxDatacenterId||datacenterId<0){
(String.format("datacenterIdcan'tbegreaterthan%dorlessthan0",maxDatacenterId));
}
this.workerId=workerId;
this.datacenterId=datacenterId;
}
/**
*獲取下一個ID
*
*@return
*/
publicsynchronizedlongnextId(){
longtimestamp=timeGen();
if(timestamp<lastTimestamp){
thrownewRuntimeException(String.format("Clockmovedbackwards.Refusingtogenerateidfor%dmilliseconds",lastTimestamp-timestamp));
}

if(lastTimestamp==timestamp){
//當前毫秒內,則+1
sequence=(sequence+1)&sequenceMask;
if(sequence==0){
//當前毫秒內計數滿了,則等待下一秒
timestamp=tilNextMillis(lastTimestamp);
}
}else{
sequence=0L;
}
lastTimestamp=timestamp;
//ID偏移組合生成最終的ID,並返回ID
longnextId=((timestamp-twepoch)<<timestampLeftShift)
|(datacenterId<<datacenterIdShift)
|(workerId<<workerIdShift)|sequence;

returnnextId;
}

privatelongtilNextMillis(finallonglastTimestamp){
longtimestamp=this.timeGen();
while(timestamp<=lastTimestamp){
timestamp=this.timeGen();
}
returntimestamp;
}

privatelongtimeGen(){
returnSystem.currentTimeMillis();
}

/**
*<p>
*獲取maxWorkerId
*</p>
*/
(longdatacenterId,longmaxWorkerId){
StringBuffermpid=newStringBuffer();
mpid.append(datacenterId);
Stringname=ManagementFactory.getRuntimeMXBean().getName();
if(!name.isEmpty()){
/*
*GETjvmPid
*/
mpid.append(name.split("@")[0]);
}
/*
*MAC+PID的hashcode獲取16個低位
*/
return(mpid.toString().hashCode()&0xffff)%(maxWorkerId+1);
}

/**
*<p>
*數據標識id部分
*</p>
*/
(longmaxDatacenterId){
longid=0L;
try{
InetAddressip=InetAddress.getLocalHost();
NetworkInterfacenetwork=NetworkInterface.getByInetAddress(ip);
if(network==null){
id=1L;
}else{
byte[]mac=network.getHardwareAddress();
id=((0x000000FF&(long)mac[mac.length-1])
|(0x0000FF00&(((long)mac[mac.length-2])<<8)))>>6;
id=id%(maxDatacenterId+1);
}
}catch(Exceptione){
System.out.println("getDatacenterId:"+e.getMessage());
}
returnid;
}


publicstaticvoidmain(String[]args){
//推特26萬個不重復的ID
IdWorkeridWorker=newIdWorker(0,0);
for(inti=0;i<2600;i++){
System.out.println(idWorker.nextId());
}
}

}

❽ Java 如何實現生成有序且唯一的id

毫秒:System.currentTimeMillis(),這個毫秒其實就是自1970年1月1日0時起的毫秒數。
納秒:System.nanoTime(),這個毫秒其實就是自1970年1月1日0時起的納秒數。
產生的數據都是唯一的,且有序的,都可以做成序列~

閱讀全文

與java生成唯一的id相關的資料

熱點內容
qd88yg壓縮機參數 瀏覽:381
pubg國際服伺服器有什麼區別 瀏覽:502
怎麼打開文件夾自動刪除 瀏覽:681
php中英文切換 瀏覽:441
php168數據 瀏覽:75
水壓縮後有彈性 瀏覽:42
蘇州阿里雲伺服器數據備份 瀏覽:522
消息提示音怎麼設置安卓 瀏覽:277
怎麼去掉安卓手機的小圓圈 瀏覽:474
女程序員每天教你一招 瀏覽:590
葯劑學pdf下載 瀏覽:477
打開的共享文件夾少東西 瀏覽:643
芝麻黑頭解壓去除視頻 瀏覽:186
光明與黑暗怎麼進入伺服器 瀏覽:659
20歲的程序員 瀏覽:238
p4備份伺服器是什麼意思 瀏覽:350
棗庄空氣壓縮機維修 瀏覽:621
色弱程序員 瀏覽:415
oraclelinux修改ip 瀏覽:665
雲上城之歌九游通用伺服器 瀏覽:348