Quanto ao primeiro, há milhares de tutoriais de JDBC por aí. Quanto ao segundo, depende do banco:
Em oracle, por exemplo, costuma-se criar uma tabela de sequence, que só vai guardar o valor do próximo índice de uma tabela. Daí pegamos esse número, colocamos dentro da entidade/objeto a ser colocado na base, e inserimos o registro.
Caso o banco tiver auto incremento, dá pra usar o método getGeneratedKeys() do PreparedStatement, que vai obter as chaves geradas pela inserção.