【问题标题】:Getting last auto increment value in database获取数据库中的最后一个自动增量值
【发布时间】:2013-07-11 17:12:30
【问题描述】:

我正在尝试检索 mySQL 中最后插入的数据的自动增量值。这是我的代码:

public int getAutoIncrementProductID() {
    ResultSet rs = null;
    DBController db = new DBController();
    db.getConnection();
    int autoIncKeyFromFunc = -1;
    rs = db.readRequest("SELECT LAST_INSERT_ID()");
    try {
        if (rs.next()) {
            autoIncKeyFromFunc = rs.getInt(1);
            System.out.println("AUTO ID IS " + autoIncKeyFromFunc);
            rs.close();
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    db.terminate();
    return autoIncKeyFromFunc;
}

但是,尽管数据库中的自动增量列不断增加,但这些代码一直返回 0 值。它只是不会获得最后插入数据的自动增量值。有人可以帮忙吗?

【问题讨论】:

标签: mysql


【解决方案1】:

您应该在插入内容后使用LAST_INSERT_ID()

对于 LAST_INSERT_ID(),最近生成的 ID 保存在 服务器基于每个连接。它不会被另一个人改变 客户。如果您更新另一个 AUTO_INCREMENT 它甚至不会更改 具有非魔术值的列(即,非 NULL 值和 不是 0)。

Source

你也可以试试

SELECT max(id) FROM tableName

但它不会假设删除的行。

【讨论】:

  • @RiaD 它告诉我找不到列名
  • @Gwen 而不是 id 使用表中自动增量列的实际列名。
【解决方案2】:

这个怎么样?

SELECT your_id FROM your_table ORDER BY your_id DESC LIMIT 1

【讨论】:

    【解决方案3】:

    我认为既然您使用的是 Jdbc,还有另一种获取生成密钥的方法是使用 API connection. createStatement (Statement.RETURN_GENERATED_KEYS); 看这个线程 PreparedStatement with Statement.RETURN_GENERATED_KEYS

    【讨论】:

      【解决方案4】:

      我用这个:

      SELECT auto_increment + 1 AS NEXT_ID
      FROM   `information_schema`.`tables`
      WHERE  table_name = "table_name"
             AND table_schema = "database_name"
      

      【讨论】:

        【解决方案5】:

        在使用 mysql_insert_id() 时要特别小心,如果您有多个到数据库的连接。因为它没有得到您插入的查询的值。它获取表的最新 id。它可能是另一个查询插入的行。只有在一个连接中访问数据库时才使用此功能。

        如果您想获取您插入的查询的 ID,请尝试选择您在该查询中插入的具有唯一值的行。例如:使用他的电子邮件地址查找用户的用户 ID。

        SELECT id from users where emailaddress='me@johndoe.com' LIMIT 1
        

        更多细节在这里: https://www.php.net/manual/en/function.mysql-insert-id.php

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-10-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-02-19
          相关资源
          最近更新 更多