我的桌子是这样的:
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?
希望以下的方法可以帮助到你。
第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");
}