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

cld4siwp  于 2022-11-28  发布在  Mysql
关注(0)|答案(6)|浏览(146)

我尝试检索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值,尽管数据库中的自动增量列不断增加。它只是不能得到最后插入的数据的自动增量值。有人可以帮助吗?

gr8qqesn

gr8qqesn1#

插入内容后,应使用LAST_INSERT_ID()
对于LAST_INSERT_ID(),最近生成的ID在服务器中按每个连接进行维护。其他客户机不会更改它。即使用非幻数值(即非NULL也非0的值)更新另一个AUTO_INCREMENT列,它也不会更改。
Source
您也可以尝试

SELECT max(id) FROM tableName

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

csga3l58

csga3l582#

这样如何?

SELECT your_id FROM your_table ORDER BY your_id DESC LIMIT 1
dzhpxtsq

dzhpxtsq3#

我认为既然你使用的是Jdbc,那么还有另一种方法来获取生成的密钥,那就是使用API connection. createStatement (Statement.RETURN_GENERATED_KEYS);

wnavrhmk

wnavrhmk4#

我用这个:

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

92dk7w1h5#

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

vlurs2pr

vlurs2pr6#

这样如何?
显示来自数据库名称的表状态LIKE 'TableName' ;

相关问题