java - 自动递增 ID 打破序列

标签 java mysql

我的程序有一个自动递增的 ID,格式为 ITM001, ITM002...。但在 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);

最佳答案

问题是您在 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);

可能会给你你想要的,但你需要弄清楚你希望你的 key 有多少位数并相应地进行调整。

关于java - 自动递增 ID 打破序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15745853/

相关文章:

java - 列表中缺少 Eclipse Indigo : Compiler compliance level 1. 7

java - 如何通过代码在eclipse中暂停java程序

java - BufferedReader 未关闭警告未消失

mysql - Ansible Docker MySql 转储

java如何检查文件是否存在并打开它?

java - AWT Graphics DrawString 导致斜体 - 倾斜字体的宽度不正确

java - 调用传递请求和响应的方法将文件存储到 MYSQL 数据库时出错

php - 更改密码表单,如果没有结果

php - AJAX 脚本没有正确地将变量解析为 php

php - 如果我有 <search input> 而不是 <account/password input>,我是否需要使用 mysql_real_escape_string?