java id用什么生成,Java 如何实现生成有序且唯一的id
大家好,关于java id用什么生成很多朋友都还不太明白,今天小编就来为大家分享关于Java 如何实现生成有序且唯一的id的知识,希望对各位有所帮助!
java生成用户编码的方法。急!
private String drive="org.gjt.mm.mysql.Driver";//这里是驱动字符串
private String url="jdbc:mysql://localhost:3306/a";//这里是连接地址
private Connection conn= null;//这里是Connection,Connection是用来操作数据
//库的,一切操作数据库都通过他来执行
public wahaha(){
try{
//加载驱动,通过驱动字符串来把驱动加载到java中,驱动字符串由数据库商来提供
Class.forName(drive);// Class.forName()就是用来把驱动加载进 java中
//获取连接,是通过 DriverManager.getConnection()来得到连接参数有三个
// url:就是你要连接的地址,就是你数据库的地址
// jdbc:mysql://localhost:3306/mydb jdbc:是
//通过jdbc方式来连接,mysql:是说连接的是mysql,localhost:是地址这里
//代表你本机地址(可以是192.168.*.*这种)3306
//:是mysql交换的端口,mydb:是你数据库的名字,这里要更改为你要连接的数据库名称
//例如:你的数据库abc
// root是你数据库的用户名
// 123是你的数据库的密码
// DriverManager.getConnection()方法返回值的是Connection,我要的就这个Connection
//每个数据库都有固定的 dirver和url url你要更改相关的地址和数据库名
conn= DriverManager.getConnection(url,"root","root");//返
//回Connection
//放到conn变量里面
} catch(ClassNotFoundException e){
System.out.println(e.getMessage());
} catch(SQLException e){
System.out.println(e.getMessage());
}
}
/**
*得到数据库连接
*
*@return Connection
*/
public Connection getconn(){
return this.conn;
}
try{
String sql="select Max(id) as id from users";//取到最大值
int i= 1;
int userId=0;
Statement state= conn.createStatement();//创建一个 Statement对象来将 SQL语句发送到数据库。
ResultSet rs= state.executeQuery(sql);//执行给定的 SQL语句,该语句返回单个 ResultSet对象
while(rs.next()){
userId=rs.getInt("id")+1;//得到最大值加1
}
} catch(SQLException e){
e.printStackTrace();
}
java生成唯一标识符有什么用
有时我们不依赖于数据库中自动递增的字段产生唯一ID,比如多表同一字段需要统一一个唯一ID,这时就需要用程序来生成一个唯一的全局ID,然后在数据库事务中同时插入到多章表中实现同步.
在java中有个类工具很好的实现产生唯一ID(UUID),但是由数字和字母及中划线组成的,故数据库字段应该设置为char并相应的建立索引.
UUID是128位整数(16字节)的全局唯一标识符(Universally Unique Identifier).
指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的.通常平台会提供生成UUID的API.UUID按照开放软件基金会(OSF)制定的标准计算,用到了以太网卡地址,纳秒级时间,芯片ID码和许多可能的数字.由以下几部分的组合:当前日期和时间(UUID的第一个部分与时间有关,如果你在生成一个 UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同),时钟序列,全局唯一的IEEE机器识别号(如果有网卡,从网卡获得,没有网卡以其他方式获得),UUID的唯一缺陷在于生成的结果串会比较长.关于UUID这个标准使用最普遍的是微软的GUID(Globals Unique Identifiers).
在ColdFusion中可以用CreateUUID()函数很简单的生成UUID,其格式为:xxxxxxxx- xxxx-xxxx-xxxxxxxxxxxxxxxx(8-4-4-16),其中每个 x是 0-9或 a-f范围内的一个十六进制的数字.而标准的UUID格式为:xxxxxxxx-xxxx-xxxx-xxxxxx-xxxxxxxxxx(8-4-4-4-12)
,可以从cflib下载CreateGUID() UDF进行转换.
使用UUID的好处在分布式的软件系统中(比如:DCE/RPC, COM+,CORBA)就能体现出来,它能保证每个节点所生成的标识都不会重复,并且随着WEB服务等整合技术的发展,UUID的优势将更加明显.
关于UUID的更多信息可以多google一下.
Java生成UUID
UUID(Universally Unique Identifier)全局唯一标识符,是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的.按照开放软件基金会(OSF)制定的标准计算,用到了以太网卡地址,纳秒级时间,芯片ID码和许多可能的数字.由以下几部分的组合:当前日期和时间(UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同),时钟序列,全局唯一的IEEE机器识别号(如果有网卡,从网卡获得,没有网卡以其他方式获得),UUID的唯一缺陷在于生成的结果串会比较长.
在Java中生成UUID主要有以下几种方式:
JDK1.5
如果使用的JDK1.5的话,那么生成UUID变成了一件简单的事,以为JDK实现了UUID:
java.util.UUID,直接调用即可.
UUID uuid= UUID.randomUUID();
String s= UUID.randomUUID().toString();//用来生成数据库的主键id非常不错..
Java代码
package com.taobao.tddl.client.util;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.InetAddress;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import java.util.concurrent.atomic.AtomicLong;
import java.util.concurrent.locks.ReentrantLock;
/**
*@author huangshang
*
*/
public class UniqId{
private static char[] digits={'0','1','2','3','4','5','6','7',
'8','9','a','b','c','d','e','f'};
private static Map<Character, Integer> rDigits= new HashMap<Character, Integer>(
16);
static{
for(int i= 0; i< digits.length;++i){
rDigits.put(digits[i], i);
}
}
private static UniqId me= new UniqId();
private String hostAddr;
private Random random= new SecureRandom();
private MessageDigest mHasher;
private UniqTimer timer= new UniqTimer();
private ReentrantLock opLock= new ReentrantLock();
private UniqId(){
try{
InetAddress addr= InetAddress.getLocalHost();
hostAddr= addr.getHostAddress();
} catch(IOException e){
hostAddr= String.valueOf(System.currentTimeMillis());
}
if(hostAddr== null|| hostAddr.length()== 0
||"127.0.0.1".equals(hostAddr)){
hostAddr= String.valueOf(System.currentTimeMillis());
}
try{
mHasher= MessageDigest.getInstance("MD5");
} catch(NoSuchAlgorithmException nex){
mHasher= null;
}
}
/**
*获取UniqID实例
*
*@return UniqId
*/
public static UniqId getInstance(){
return me;
}
/**
*获得不会重复的毫秒数
*
*@return
*/
public long getUniqTime(){
return timer.getCurrentTime();
}
/**
*获得UniqId
*
*@return uniqTime-randomNum-hostAddr-threadId
*/
public String getUniqID(){
StringBuffer sb= new StringBuffer();
long t= timer.getCurrentTime();
sb.append(t);
sb.append("-");
sb.append(random.nextInt(8999)+ 1000);
sb.append("-");
sb.append(hostAddr);
sb.append("-");
sb.append(Thread.currentThread().hashCode());
return sb.toString();
}
/**
*获取MD5之后的uniqId string
*
*@return uniqId md5 string
*/
public String getUniqIDHashString(){
return hashString(getUniqID());
}
/**
*获取MD5之后的uniqId
*
*@return byte[16]
*/
public byte[] getUniqIDHash(){
return hash(getUniqID());
}
/**
*对字符串进行md5
*
*@param str
*@return md5 byte[16]
*/
public byte[] hash(String str){
opLock.lock();
try{
byte[] bt= mHasher.digest(str.getBytes("UTF-8"));
if(null== bt|| bt.length!= 16){
throw new IllegalArgumentException("md5 need");
}
return bt;
} catch(UnsupportedEncodingException e){
throw new RuntimeException("unsupported utf-8 encoding", e);
} finally{
opLock.unlock();
}
}
/**
*对二进制数据进行md5
*
*@param str
*@return md5 byte[16]
*/
public byte[] hash(byte[] data){
opLock.lock();
try{
byte[] bt= mHasher.digest(data);
if(null== bt|| bt.length!= 16){
throw new IllegalArgumentException("md5 need");
}
return bt;
} finally{
opLock.unlock();
}
}
/**
*对字符串进行md5 string
*
*@param str
*@return md5 string
*/
public String hashString(String str){
byte[] bt= hash(str);
return bytes2string(bt);
}
/**
*对字节流进行md5 string
*
*@param str
*@return md5 string
*/
public String hashBytes(byte[] str){
byte[] bt= hash(str);
return bytes2string(bt);
}
/**
*将一个字节数组转化为可见的字符串
*
*@param bt
*@return
*/
public String bytes2string(byte[] bt){
int l= bt.length;
char[] out= new char[l<< 1];
for(int i= 0, j= 0; i< l; i++){
out[j++]= digits[(0xF0& bt[i])>>> 4];
out[j++]= digits[0x0F& bt[i]];
}
return new String(out);
}
/**
*将字符串转换为bytes
*
*@param str
*@return byte[]
*/
public byte[] string2bytes(String str){
if(null== str){
throw new NullPointerException("参数不能为空");
}
if(str.length()!= 32){
throw new IllegalArgumentException("字符串长度必须是32");
}
byte[] data= new byte[16];
char[] chs= str.toCharArray();
for(int i= 0; i< 16;++i){
int h= rDigits.get(chs[i* 2]).intValue();
int l= rDigits.get(chs[i* 2+ 1]).intValue();
data[i]=(byte)((h& 0x0F)<< 4|(l& 0x0F));
}
return data;
}
/**
*实现不重复的时间
*
*@author dogun
*/
private static class UniqTimer{
private AtomicLong lastTime= new AtomicLong(System.currentTimeMillis());
public long getCurrentTime(){
return this.lastTime.incrementAndGet();
}
}
}
Java 如何实现生成有序且唯一的id
this.id= UUID.randomUUID().toString();
使用UUID就可以了
UUID由以下几部分的组合:
(1)当前日期和时间,UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同。
(2)时钟序列。
(3)全局唯一的IEEE机器识别号,如果有网卡,从网卡MAC地址获得,没有网卡以其他方式获得。
UUID的唯一缺陷在于生成的结果串会比较长。关于UUID这个标准使用最普遍的是微软的GUID(Globals Unique Identifiers)。在ColdFusion中可以用CreateUUID()函数很简单地生成UUID,其格式为:xxxxxxxx-xxxx- xxxx-xxxxxxxxxxxxxxxx(8-4-4-16),其中每个 x是 0-9或 a-f范围内的一个十六进制的数字。而标准的UUID格式为:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx(8-4-4-4-12),可以从cflib下载CreateGUID() UDF进行转换。
maven中的groupId和artifactId到底指的是什么
GroupID是项目组织唯一的标识符,比如我的项目叫test001那么GroupID应该是 com.lixiaoming.test001域名.公司名.项目名
ArtifactID就是项目的唯一的标识符,一般是项目名-xxx比如test001-model
Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。
Maven除了以程序构建能力为特色之外,还提供高级项目管理工具。由于 Maven的缺省构建规则有较高的可重用性,所以常常用两三行 Maven构建脚本就可以构建简单的项目。由于 Maven的面向项目的方法,许多 Apache Jakarta项目发文时使用 Maven,而且公司项目采用 Maven的比例在持续增长。
拓展资料:
GroupID是项目组织唯一的标识符,实际对应JAVA的包的结构,是main目录里java的目录结构。
ArtifactID就是项目的唯一的标识符,实际对应项目的名称,就是项目根目录的名称。
一般GroupID就是填com.info.test.这样子。
参考资料:百度百科-Maven
java id用什么生成的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于Java 如何实现生成有序且唯一的id、java id用什么生成的信息别忘了在本站进行查找哦。