Java 获取最后插入 MySQL 记录的自增 ID 值的 3 种方法
mysql
2017-07-29
String sql = "INSERT INTO users (username,password,email) VALUES (?,?,?);"
//传入参数:Statement.RETURN_GENERATED_KEYS
PreparedStatement pstmt = (PreparedStatement) conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
pstmt.setString(1, user.getUsername());
pstmt.setString(2, user.getPassword());
pstmt.setString(3, user.getEmail());
pstmt.executeUpdate(); //执行sql
int autoInckey = -1;
ResultSet rs = pstmt.getGeneratedKeys(); //获取结果
if (rs.next()) {
  autoIncKey = rs.getInt(1);//取得ID
} else {
  // throw an exception from here
}

SELECT MAX(id) FROM table

该方法在多线程等情况下可能会造成不正确。

SELECT LAST_INSERT_ID()

或者

SELECT @@INDENTITY

这两个都是单个连接的,不存在所谓的两个人都同时插入,分不清的问题唯一的问题是,如 果一句 INSERT 插入多条,返回的是第一个ID

其它文章