我的程序有一个自动递增的ID,格式为ITM001, ITM002...
。但在ITM009, ITM0010
之后,序列被破坏并返回ITM001
。因此我将ITM0010
作为下一个商品ID而不是ITM0011
。请帮助我理解如何编写查询以继续序列。
ITM001 **ITM0010** ITM002 ITM003 ITM004 ITM005 ITM006 ITM007 ITM008 ITM009
Connection conn = DBConnection.conn();
String sql = "select itemId from ItemMain";
ResultSet res = DBHandller.getData(sql, conn);
if (res.last()) {
String lastid = res.getString("itemId");
return lastid;
}
return null;
/////////////////////////////////////////////////////////////////////////////
String itemID = ItemController.getItemID();
String[] split = itemID.split("ITM",0);
int num = Integer.parseInt(split[1]);
itemID = "ITM00"+ (num+1);
txtitemID.setText(itemID);
答案 0 :(得分:1)
问题是你在0上使用split
,并且在增加后你的String中有几个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);
可能会给你你想要的东西,但是你需要弄清楚你希望你的钥匙有多少位数并相应地进行调整。
答案 1 :(得分:0)
您隐式地对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。
如果你用1“0”而不是2来填充“10”,隐式上升排序将是正确的。 “001 ... 009,010”