首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >生成唯一ID

生成唯一ID
EN

Stack Overflow用户
提问于 2012-01-30 07:01:46
回答 6查看 29.3K关注 0票数 18

我需要为我的应用程序生成唯一的ID。当我使用(UUID.randomUUID()).toString()时,我得到了一个代码(认为这是唯一的),这是非常冗长的。

当我们使用Java时间戳或随机字符串生成代码时,我不确定它有多独特。

我需要生成唯一的代码,只有8-10个字符的长度(阿尔法-数字)。怎么弄成这样?我正在使用MySQL数据库。

在数据库端生成唯一的代码是最好的方法,还是我们可以在Java中生成如此短的(但却是唯一的)代码?

任何使用示例代码的建议都将非常有用。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-01-30 07:24:41

我使用来自RandomStringUtils.randomAlphanumeric()commons-lang方法来实现这一点:

代码语言:javascript
运行
复制
import org.apache.commons.lang.RandomStringUtils;

public static final int ID_LENGTH = 10;

public String generateUniqueId() {
    return RandomStringUtils.randomAlphanumeric(ID_LENGTH);
}

如果使用Maven,请确保已将commons-lang添加到项目的依赖项中:

代码语言:javascript
运行
复制
<dependency>
    <groupId>commons-lang</groupId>
    <artifactId>commons-lang</artifactId>
    <version>2.6</version>
</dependency>

在数据库端生成唯一的代码是最好的方法,还是我们可以在java中生成如此短的(但却是唯一的)代码?

这取决于你和你的项目。id生成是业务逻辑的一部分吗?如果是和所有逻辑都写在Java上,那么就把它写在Java上。如果全部或部分逻辑委托给数据库,那么在那里生成id (但在本例中,您将对特定数据库有很强的依赖性)。

票数 22
EN

Stack Overflow用户

发布于 2012-01-30 08:12:13

你有什么具体的限制需要考虑吗?比如跨应用的唯一性?因为否则,MySQL本身就能够生成ID,您所需要做的就是定义一个autoincrement列,而不是在插入时指定它(也就是说,为它插入一个NULL值)--这将使MySQL填充下一个可用的ID,该ID是唯一的,并且不需要您的工作。

它不会是字母数字字符串(我不确定是指定为需求还是限制),但是如果您所需要的只是唯一性,它就足够了。8-10个字母数字字符不足以保证随机生成的字符串的唯一性,因此您必须对数据库执行插入检查。

票数 7
EN

Stack Overflow用户

发布于 2012-01-30 07:27:06

在数据库端生成唯一的代码是最好的方法,还是我们可以在Java中生成如此短的(但却是唯一的)代码?

数据库被设计成能够在需要时生成唯一的ID。我怀疑你(或我)可能编码的任何东西都是“更好”的变体。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9060428

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档