如何从更新插入Java MariaDB中获取最新的ID

问题描述 投票:0回答:1

我的桌子是这样的:

users (id, name, email, age)
id is autoincrement
name varchar and unique
email varchar
age decimal

我有一个像这样的SQL:

INSERT INTO users (name, email, age)
VALUES ('Alice', '[email protected]', 30)
ON DUPLICATE KEY UPDATE
    name = VALUES(name),
    age = VALUES(age);

使用java我可以检索最后生成的id:

ResultSet rs = stmt.getGeneratedKeys();
                int generatedKey = 0;
                if (rs.next()) {
                    generatedKey = rs.getInt(1);

如果有插入,我可以检索 generatedKey。

但是如果我的 sql 是关于更新的,则没有生成的密钥,因为它已经存在了。

有没有办法从特定的插入/更新中获取 id?

java mariadb sql-update mysql-insert-id
1个回答
0
投票

希望以下的方法可以帮助到你。

第1步。执行插入准备好的语句。

PreparedStatement preparedStatement = connection.prepareStatement(
                "INSERT INTO users (name, email, age) VALUES (?, ?, ?) " +
                "ON DUPLICATE KEY UPDATE " +
                "name = VALUES(name), email = VALUES(email) " +
                "id = LAST_INSERT_ID(id)");
// set the preparedStatement parameters
int returned = preparedStatement.executeUpdate();

第2步。执行select Last insert id语句。

Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT LAST_INSERT_ID() AS n");
resultSet.next();
int id = resultSet.getInt(1);

P.S. 要了解是否已插入新行或已更新现有行:

if (returned == 1) {
   System.out.println("Inserted");
} else {
   System.out.println("Updated");
}
© www.soinside.com 2019 - 2024. All rights reserved.