Como obter auto-generated keys em uma classe Java

As bases de dados fornecem uma característica de auto-incremento que é usado geralmente para IDs. JDBC API tem também um método para buscar o último ID gerado.

O exemplo abaixo gera um ID e usa-o para atualizar a coluna de uma tabela.

import java.sql.*;

public class testKeys 
{
    public static void main(String[] args) 
    {
        DB db = new DB();
        Connection conn =
            
db.dbConnect("jdbc:jtds:sqlserver://localhost:1433/tempdb","sa","");
        db.performKeys(conn);
    }
}

class DB
{
    public DB() {}

    public Connection dbConnect(String db_connect_string, 
                                String db_userid,String db_password)
    {
        try
        {
            Class.forName("net.sourceforge.jtds.jdbc.Driver");
            Connection conn = DriverManager.getConnection(
                              db_connect_string, db_userid, db_password);
            System.out.println("conectado");
            return conn;
            
        }
        catch (Exception e)
        {
            e.printStackTrace();
            return null;
        }
    }

    public void performKeys(Connection conn)
    {
        String query;
        PreparedStatement pstmt;
        
        try
        {
            query = "insert into customer (name,category) "+
                    "values ('name1','temp')";
            pstmt = conn.prepareStatement(query, 
                                          Statement.RETURN_GENERATED_KEYS);

            pstmt.executeUpdate();
            ResultSet keys = pstmt.getGeneratedKeys();

            int count = 0;
            
            keys.next();
            int key = keys.getInt(1);
            
            query ="update customer set age =? where id =?";
            pstmt = conn.prepareStatement(query);
            pstmt.setFloat(126);
            pstmt.setInt(2, key);
            pstmt.executeUpdate();

            keys.close();
            pstmt.close();
            conn.close();

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

};