获取数据库中的最后一个自动增量值

时间:2013-07-13 04:59:18

标签: mysql

我正在尝试检索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值。它只是不会得到最后插入数据的自动增量值。有人可以帮忙吗?

4 个答案:

答案 0 :(得分:7)

插入内容后应使用LAST_INSERT_ID()

  

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

Source

您也可以尝试

SELECT max(id) FROM tableName

但它不会假设已删除的行。

答案 1 :(得分:3)

这个怎么样?

SELECT your_id FROM your_table ORDER BY your_id DESC LIMIT 1

答案 2 :(得分:1)

我认为既然你正在使用Jdbc,另一种获取生成密钥的方法是使用API​​ connection. createStatement (Statement.RETURN_GENERATED_KEYS);看看这个帖子PreparedStatement with Statement.RETURN_GENERATED_KEYS

答案 3 :(得分:0)

在使用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