Java如何检索自动生成的键?

package org.nhooo.example.jdbc;

import java.sql.*;

public class GetGeneratedKeyExample {
    private static final String URL = "jdbc:mysql://localhost/nhooo";
    private static final String USERNAME = "root";
    private static final String PASSWORD = "";

    public static void main(String[] args) {
        try (Connection connection =
                 DriverManager.getConnection(URL, USERNAME, PASSWORD)) {

            // 订单表有一个ID列,其值将是auto
            //由数据库生成。插入新记录时,新的ID
            // 对于主键将生成,我们将获得
            //生成的密钥,因此我们可以在其他过程中使用它。对于
            // 实例,如果我们有一个主明细表,其中的明细
            // 该表需要来自主表的ID。
            String sql = "INSERT INTO orders (username, order_date) " +
                "VALUES ('foobar', '2018-11-12')";
            Statement stmt = connection.createStatement();

            // 执行语句时,我们可以传递
            // Statement.RETURN_GENERATED_KEYS,以便我们稍后提取
            // 由返回的结果集对象生成的键
            // 这种方法。
            stmt.executeUpdate(sql, Statement.RETURN_GENERATED_KEYS);

            ResultSet keys = stmt.getGeneratedKeys();
            int lastKey = 1;
            while (keys.next()) {
                lastKey = keys.getInt(1);
            }

            System.out.println("Last Key: " + lastKey);

        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

orders表的结构。

CREATE TABLE `orders` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `username` varchar(50) NOT NULL,
  `order_date` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB;

Maven依赖

<!-- https://search.maven.org/remotecontent?filepath=mysql/mysql-connector-java/8.0.17/mysql-connector-java-8.0.17.jar -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.17</version>
</dependency>

Maven中央