【问题标题】:How to generate a uniqueID如何生成唯一ID
【发布时间】:2018-05-04 15:32:37
【问题描述】:

我正在开展一个项目,我们使用 JSP 创建的注册表单来存储学生的信息。现在我希望每个学生都应该有一个唯一的ID。我该怎么做?

我希望 ID 是名字、姓氏和一些数字(字母数字 ID)的组合。有没有办法做到这一点?这个 ID 生成可以在数据库端还是在 java 中完成?每次我存储来自 JSP 页面的信息时,都应该为每个条目自动生成一个 ID,并且该 ID 也存储在 DB 中。

我正在使用 mysql 作为数据库。

【问题讨论】:

  • 在我看来,最好的方法是尝试使用当前时间戳以及名字和姓氏,这始终是唯一的。
  • 你是如何保存数据的。如果使用 RDBMS,则使用序列/身份/…作为唯一标识符。不要重新发明*。
  • 我认为你应该使用 UUID。哪个简单易行

标签: java mysql jsp servlets


【解决方案1】:

尝试将您的学生详细信息与 uuid 结合起来,以下是如何在 java 中生成 uuid

public static void main(String[] args) {
    final String uuid = UUID.randomUUID().toString().replace("-", "");
    System.out.println("uuid = " + uuid);
}

【讨论】:

  • 感谢您的回答,在您回答之后,我通过了这种方法,在 UUID 的情况下我看到的是它会生成一个类似的 ID:44e128a5-ac7a-4c9a-be4c-224b6bf81b20但我认为这很难记住,因为我希望我的用户可以使用生成的 ID 登录我的应用程序。
  • @user8411341 将到达日期和时间(最多几秒)与客人姓名结合起来怎么样?
【解决方案2】:

这样使用

String date = new SimpleDateFormat("yyyMMddHHmmssSS").format(new Date());

日期变量包含唯一的日期时间值,然后添加您的名字和姓氏以及日期

String userId=firstName+lastName+date;

【讨论】:

    【解决方案3】:

    虽然有包括时间戳、随机数或 UUID 生成之类的方法,但在高度并发的环境中仍然有机会(尽管可以忽略不计)获得相同的 id。我建议在唯一键的某处添加数据库生成的序列号以及时间戳等其他内容,以确保您始终获得唯一 ID。

    【讨论】:

      【解决方案4】:

      当你得到输入数据时调用这个函数

      public String generateID(String f_name,String l_name) {
          String uniqueID = f_name.trim()+l_name.trim()+UUID.randomUUID().toString();
          return uniqueID;
      }
      

      并将此函数的值设置为 db

      【讨论】: