生成唯一ID

17 java mysql database uniqueidentifier

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

当我们在Java Timestamp或randomstring的帮助下生成代码时,我不确定它有多独特.

我需要生成长度仅为8-10个字符的唯一代码(字母数字).怎么这样?我正在使用MySQL数据库.

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

任何带有示例代码的建议都会非常有用.

Sla*_*hin 22

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

import org.apache.commons.lang.RandomStringUtils;

public static final int ID_LENGTH = 10;

public String generateUniqueId() {
    return RandomStringUtils.randomAlphanumeric(ID_LENGTH);
}
Run Code Online (Sandbox Code Playgroud)

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

<dependency>
    <groupId>commons-lang</groupId>
    <artifactId>commons-lang</artifactId>
    <version>2.6</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

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

这取决于您和您的项目.id生成是业务逻辑的一部分吗?如果是,所有逻辑都写在Java上,那么在Java上编写它.如果将逻辑的全部或部分委托给数据库,那么在那里生成id(但在这种情况下,您将对特定数据库具有强依赖性).


Nal*_*ial 7

您是否有任何特定的限制需要考虑?如跨应用的独特性?因为否则,MySQL非常能够自己生成ID,所有你需要做的就是定义一个autoincrement列而不是在插入时指定它(意味着,NULL为它插入一个值) - 这将使MySQL用下一个可用的ID填充它,独特,不需要你的工作.

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


And*_*son 5

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

数据库旨在能够在需要时生成唯一ID.我怀疑你(或我)可以编码什么是"更好"的变体.

  • 试试[其中任何](http://www.google.com.au/search?q=generate+unique+IDs+for+MySQL&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-US :官方与客户端=火狐-A).我不是每天都使用DB,而且从未使用过MySQL. (2认同)