簡體   English   中英

自動遞增ID中斷序列

[英]Auto Increment ID break the Sequence

我的程序有一個ITM001, ITM002...格式的自動遞增ID。 但是在ITM009, ITM0010之后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);

問題是您正在使用split on 0,並且在遞增后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);

可能會給您您想要的東西,但是您需要弄清楚您的鑰匙要擁有多少位數並進行相應的調整。

您正在對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”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM