java生成唯一ID

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java生成唯一ID相关的知识,希望对你有一定的参考价值。

需用纯java生成一个字段 存到数据库中作为记录的唯一ID
形式是00000000001 这样 要求按顺序来 如下一个应是00000000002
求高手帮忙!!!

让数据库自动生成把
mysql 把Id设置为auto_increment
oracle 生成一个序列.sequence

java可以通过UUID这个类生成一个唯一的Id但不是你想的那样
参考技术A DecimalFormat df=(DecimalFormat)DecimalFormat.getInstance();
df.applyLocalizedPattern("00000000000");
for(int i=1;i<5;i++)
System.out.println(df.format(i));


对数字进行格式化,你可以不用for循环,使用count++之类的。
参考技术B int x= 1;起始数字
String s = ""+1;
int y = 11-s.length;
String m = null;
for(int i =0;i<y;i++)
m += "0";
i++;

m += s;
参考技术C 楼上正解

如何生成唯一的数字ID并在java中保持计数?

我正在研究一个Java机器人,它从excel文件中复制信息并将其粘贴到程序上以创建用户名。除了ID号之外,我从excel文件中获取了所需的一切。

我正在尝试生成一个唯一的仅限数字的ID(因此UUID不起作用)。它必须是6位数字,因此,它的范围在100,000到999,999之间。这是我到目前为止所得到的:

public void genID() {
    ArrayList<Integer> casillero = new ArrayList<Integer>();
    for (int i = 100000; i < 1000000; i++) {
        casillero.add(new Integer(i));
    } Collections.shuffle(casillero);
    for (int i = 0; i < 1; i++) {
        System.out.println("El nuevo ID de casillero es: I" + casillero.get(i));
    }
}

这会生成一个6位数字,这很好。但是,如何确保下次运行java程序时没有生成这个数字?谢谢!

答案

JVM不可能记住其先前运行时的任何值(不包括代码本身中编译的静态值)。因为如果这样,你必须编写程序以在运行时保存重要数据,否则它将在最后一个线程终止时丢失。 Java支持大量的InputStreamsOutputStreams,它们为整个世界提供了可能性,包括文件读取和写入。

编写文件的基本方法是使用FileOutputStream,它将原始字节写入给定文件。有一些像PrintStream这样的对象会自动获取给定字符串的字节(如果传递了对象,则会解析字符串)并将它们写入输出流。


您需要在程序终止之前将ID保存到文件中,并在每次调用genID()方法时读取文件。读取文件后,可以使用简单的循环检查生成的ID列表中的任何现有值。考虑这个例子:

public void genID() {
    ArrayList<Integer> casillero = new ArrayList<Integer>();
    for (int i = 100000; i < 1000000; i++) {
        casillero.add(new Integer(i));
    } Collections.shuffle(casillero);
    for (int i = 0; i < 1; i++) {
        System.out.println("El nuevo ID de casillero es: I" + casillero.get(i));
    }

    try {
        getUsedIDS().forEach(i -> {
            /*
             * Iterate through the existing IDs
             * and make sure that casillero does
             * not contain any of them.
             */
            if(casillero.contains(i)) casillero.remove(i);
        });
    } catch (IOException e) {
        e.printStackTrace();
    }
}
public List<Integer> getUsedIDS() throws IOException {
    //The file which you saved the IDs to.
    File file = new File("IDs.txt");
    //Return all the values in the file.
    return Files.readAllLines(file.toPath()).stream().mapToInt(s -> Integer.parseInt(s)).boxed().collect(Collectors.toList());
}
public void saveIDs(List<Integer> IDs) throws FileNotFoundException {
    /*
     * Create a PrintStream that writes into a 
     * FileOutputStream which in turn writes to your file.
     * Because 'true' was passed to the constructor, this
     * stream will append to the file.
     */
    PrintStream s = new PrintStream(new FileOutputStream(new File("IDs.txt"), true));
    //Print every element in the IDs list.
    IDs.forEach(s::println);
    /*
     * Read more about flush here:
     * https://stackoverflow.com/a/2340125/5645656
     */
    s.flush();
    /*
     * Close the stream to prevent a resource leak.
     */
    s.close();
}

以上是关于java生成唯一ID的主要内容,如果未能解决你的问题,请参考以下文章

Java 如何实现生成有序且唯一的id

Java生成唯一的ID

如何生成唯一的Android设备ID

java生成18位的唯一id

Java生成全局唯一ID代码演示

Java生成唯一ID