Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 自动递增ID中断序列_Java_Mysql - Fatal编程技术网

Java 自动递增ID中断序列

Java 自动递增ID中断序列,java,mysql,Java,Mysql,我的程序有一个自动递增的ID,格式为ITM001、ITM002…。但是在ITM009之后,ITM0010序列被中断,并返回到ITM001。因此,我将ITM0010作为下一个项目ID,而不是ITM0011。请帮助我理解如何编写查询以继续序列 ITM001 **ITM0010** ITM002 ITM003 ITM004 ITM005 ITM006 ITM007 ITM008 ITM009 问题是您正在0上使用split,并且在递增后字符串中有几个0,例如: String[] split =

我的程序有一个自动递增的ID,格式为
ITM001、ITM002…
。但是在
ITM009之后,ITM0010
序列被中断,并返回到
ITM001
。因此,我将
ITM0010
作为下一个项目ID,而不是
ITM0011
。请帮助我理解如何编写查询以继续序列

ITM001 **ITM0010** ITM002 ITM003 ITM004 ITM005 ITM006 ITM007 ITM008 ITM009
问题是您正在0上使用
split
,并且在递增后字符串中有几个0,例如:

    String[] split = itemID.split("ITM",0);
    int num = Integer.parseInt(split[1]);
    String second = "ITM00" + (num + 1);
    System.out.println(second);
    System.out.println(Arrays.toString(second.split("0")));
这将输出:

[ITM, , 1]
因为最后的0也将被拆分

比如:

String itemID = "ITM009";
int num = Integer.parseInt(itemID.substring(itemID.indexOf("0")));
String second = "ITM0" + String.format("%02d", num + 1);
System.out.println(second);

可能会给你想要的,但你需要计算出你希望你的钥匙有多少位数,并相应地进行调整。

问题是你在0上使用了
split
,在你递增后,字符串中有几个0,例如:

    String[] split = itemID.split("ITM",0);
    int num = Integer.parseInt(split[1]);
    String second = "ITM00" + (num + 1);
    System.out.println(second);
    System.out.println(Arrays.toString(second.split("0")));
这将输出:

[ITM, , 1]
因为最后的0也将被拆分

比如:

String itemID = "ITM009";
int num = Integer.parseInt(itemID.substring(itemID.indexOf("0")));
String second = "ITM0" + String.format("%02d", num + 1);
System.out.println(second);

可能会给你想要的,但是你需要计算出你想要你的密钥有多少位数,并相应地调整。

你在一个VARCHAR字段上隐式排序

SELECT a.a FROM (
    SELECT 'a001' [a]
    UNION ALL
    SELECT 'a009' [a]
    UNION ALL
    SELECT 'a0010' [a]
) a ORDER BY a

a001
a0010
a009
您最后获取的id始终为009,因此您创建的下一个id始终为0010


如果在“10”前面填充1“0”,而不是2,则隐式升序排序将是正确的。“001…009,010”

您正在对VARCHAR字段进行隐式排序

SELECT a.a FROM (
    SELECT 'a001' [a]
    UNION ALL
    SELECT 'a009' [a]
    UNION ALL
    SELECT 'a0010' [a]
) a ORDER BY a

a001
a0010
a009
您最后获取的id始终为009,因此您创建的下一个id始终为0010


如果在“10”前面填充1“0”,而不是2,则隐式升序排序将是正确的。“001…009,010”

如果您需要一个无间隙序列,则自动增量是作业的错误工具。不管怎样,现在还不清楚如何在这里使用自动增量,因为您的列似乎是VARCHAR:-?@alvaro G.Vicario yes。itemId是varchar。你知道我怎么才能得到项目ID的序列吗?你实际上不是在说MySQL的
自动增量
功能,是吗?@lvaro G.Vicario no.我试着从表中获取最后一个ID,然后使用SPLIT函数获取数字部分的值,如果你需要一个无间隔的序列,则添加1,自动增量对于作业来说是错误的工具。不管怎样,现在还不清楚如何在这里使用自动增量,因为您的列似乎是VARCHAR:-?@alvaro G.Vicario yes。itemId是varchar。你知道如何获取项目ID的顺序吗?你实际上不是在说MySQL的
自动增量
功能,是吗?@lvaro G.Vicario no.我试图从表中获取最后一个ID,然后使用拆分函数获取数字部分的值并添加1,我明白了。谢谢你的建议。让我试试。看我的更新,这是一个更简单的方法,可能会达到你想要的。Thnx太多了。我试试看。再次强调Thnx。它与“ITM0”配合使用效果很好。但当我使用ITM00格式时仍然遇到同样的问题。你能帮我修一下吗?plsI建议您指定钥匙的最小长度。。。如果你想要0作为分隔符,第一个应该是ITM000,如果你想要你的第一个0是有效的,那么你需要调整子字符串。我明白了。谢谢你的建议。让我试试。看我的更新,这是一个更简单的方法,可能会达到你想要的。Thnx太多了。我试试看。再次强调Thnx。它与“ITM0”配合使用效果很好。但当我使用ITM00格式时仍然遇到同样的问题。你能帮我修一下吗?plsI建议您指定钥匙的最小长度。。。如果希望0作为分隔符,第一个将是ITM000,如果希望第一个0有效,则需要调整子字符串。