2011-04-19 54 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