2011-04-19 121 views
0

我有一個表格:'Categories',它有兩個字段:Category_ID和Category。 Category_ID字段中的數據類似於'c1','c2'。如果有10行,則從c1到c10。當我在此表中插入新記錄時,如何設置類似於c11或c12的Category_ID?如果沒有記錄被刪除,那麼它很容易根據行數進行設置。但用戶可以刪除記錄。我嘗試從表中檢索Category_ID,將其存儲在向量中,然後設置一個字符串變量,其中存儲所有用';'分隔的category_id。我想將c和相關的數字從Category_ID中分離出來,這樣可以在插入查詢中使用下一個數字。如何分割與字符串數組中的字符組合的數字? (eg.c1)

Statement st; 
    ResultSet rsCatID; 

    String query=""; 
    String querySelect="";//used to get last category_id number,so that next value will be applied in insert query. 
    Vector vCatID=new Vector(); 
    String strCatID=""; 
    String[] arrCatID;  

然後,在連接之後,嘗試捕捉塊線,

 querySelect="select Category_ID from Categories"; 
     rsCatID=st.executeQuery(querySelect); 
     while(rsCatID.next()){ 
      vCatID.add(rsCatID.getString("Category_ID").toString()); 
     } 
     for(int i=0;i<vCatID.size();i++){ 
      strCatID+=vCatID.get(i).toString()+";"; 
     } 

     System.out.println("strcatidcount=="+strCatID); 

     arrCatID=strCatID.split(";"); 
     for(int i=0;i<arrCatID.length;i++){ 
      System.out.println("arrCatID=="+arrCatID[i]); 
     } 

現在想從陣列分裂位和要插入下一個值,並以字符「C」附接並插入整個新紀錄。我怎樣才能分割它?例如。如果category_id是c3,那麼3必須存儲在另一個數組中,並且對於新記錄4,將插入(c4)。

回答

3
SELECT MAX((CAST(REPLACE(Category_ID,'C','') AS INT))) from Categories 

或者:

SELECT MAX(cint(MID(Category_ID,2))) FROM Categories; 

這將帶來最高intnum回

+0

非常感謝。但我使用Microsfot Access,所以Cast功能不起作用。我已經使用CINT函數,現在它的工作。 – bsm 2011-04-19 10:41:04

+0

它在MS Access的sql視圖中工作。但是在編譯我的java文件時給我一個錯誤。 [Microsoft] [ODBC Microsoft Access驅動程序]表達式中的未定義函數'REPLACE' – bsm 2011-04-19 11:03:46

+0

這非常奇怪,但是如果您知道第一個字符總是您將移除的字符,則可以使用以下函數:SELECT MAX(cint(MID (Category_ID,2))) FROM Categories; – 2011-04-19 12:07:55

1

這是太複雜了!只需使用自動增量字段。爲什麼類別字段必須以字母c開頭?爲什麼它不能只是一個整數?如果您需要在應用程序中以'c'開始顯示,則只要從數據庫中讀取值就可以修改這些值,但將它們保存爲數據庫中的整數。這將會更有效率,並且可以避免重新發明輪子。

+0

謝謝。是第一選擇總是使用自動增量field.But由於有一定的要求,我不能使用它。 – bsm 2011-04-19 10:41:52