Il est commun que les id soient géré

public void create(Client client) {
    Connection connection = null;
    try {
        BasicDataSource dataSource = new BasicDataSource();
        dataSource.setUrl("url");
        dataSource.setUsername("username");
        dataSource.setPassword("password");
 
        Connection connection = dataSource.getConnection();
 
        PreparedStatement preparedStatement = connection.prepareStatement(
            "INSERT INTO CLIENT (firstname, lastname) VALUES (?, ?)", 
            Statement.RETURN_GENERATED_KEYS
        );
 
        preparedStatement.setString(1, client.getFirstname());
        preparedStatement.setString(2, client.getLastname());
 
        // Insertion en base de données
        preparedStatement.executeUpdate();
 
        // Après l'INSERT, la méthode récupère la clé auto-générée de la table Client
        ResultSet rs = preparedStatement.getGeneratedKeys();
        if (rs.next()) {
            client.setId(rs.getLong(1)); // on set la valeur au client
        }
 
        System.out.println("Client créé");
    } catch (SQLException e) {
        e.printStackTrace();
        try {
            if (connection != null) connection.rollback();
        } catch (SQLException e1) {
            e1.printStackTrace();
        }
    }
}

Ainsi l’objet client passé en paramètre est modifié pour lui donner l’id et l’appelant pourra exploiter cette information.