2013-04-01 2 views
1

내 프로그램에 ITM001, ITM002... 형식의 자동 증가 ID가 있습니다. 그러나 ITM009, ITM0010 다음에 시퀀스가 ​​깨지고 ITM001으로 돌아갑니다. 따라서 ITM0011 대신 다음 항목 ID가 ITM0010이됩니다. 순서를 계속 진행하기 위해 쿼리를 작성하는 방법을 이해하는 데 도움을주십시오.자동 증가 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

@ Álvaro G. Vicario 예. itemId는 varchar입니다. Item ID의 시퀀스를 어떻게 얻을 수 있는지 알 수 있습니까? – amal

답변

1

문제는 당신이 0에 split을 사용하고 있는지, 그리고 당신이 증가 후 문자열의 여러 공의의는 예를 들어,이 있습니다 :

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"))); 

이 출력됩니다 :

마지막 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 

그래서 당신이 만들 다음 하나는 항상 앞 1 "0"과 "10"을 채워 경우 0010

일 대신이 암시을 것입니다 당신이 픽업 마지막 ID는 항상 009가 될 것입니다 오름차순 정렬은 정확할 것입니다. "001 ... 009,010"