2013-04-01 67 views
1

我的程序有一個自動遞增的ID,格式爲ITM001, ITM002...。但在ITM009, ITM0010之後,序列被破壞並返回ITM001。因此,我將ITM0010作爲下一個項目ID而不是ITM0011。請幫助我瞭解如何編寫查詢以繼續序列。自動遞增ID打破序列

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

@波蘭王子爪哇 – amal

+1

如果你需要一個無間隙序列,自動增量只是工作的錯誤工具。無論如何,現在還不清楚你如何在這裏使用自動增量,因爲你的列看起來是VARCHAR: - ? –

+0

@ÁlvaroG. Vicario是的。 itemId是varchar。你有什麼想法我怎麼能得到項目ID的序列。 – amal

回答

1

的問題是,你在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

我看到了。 thnx您的建議。讓我試試這個。 – amal

+0

看到我的更新,這是一個更簡單的方法,可能會實現你想要的。 – pcalcao

+0

Thnx這麼多。我會嘗試一下。 Thnx再次。 – amal

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,所以你創建下一個將永遠是0010

如果前補齊「10」 1「0」,而不是兩個隱升序排序是正確的。 「001 ... 009,010」