Java 自动递增ID中断序列
我的程序有一个自动递增的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 =
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有效,则需要调整子字符串。