Algo assim deve funcionar:
// tell the driver you want the generated keys
stmt = c.prepareStatement("INSERT ... ", Statement.RETURN_GENERATED_KEYS);
stmt.executeBatch();
// now retrieve the generated keys
ResultSet rs = stmt.getGeneratedKeys();
while (rs.next()) {
int id = rs.getInt(1);
.. save the id somewhere or update the items list
}
Eu acho (eu não certeza!) que as chaves são retornadas na ordem em que foram geradas. Portanto, a primeira linha do ResultSet deve mapear para o primeiro "item" da lista que você está processando. Mas verifique isso!
Editar
Se isso não funcionar, tente especificar as colunas reais para as quais os valores são gerados:
stmt = c.prepareStatement("INSERT ... ", new String[] {"id"});