O que eu fiz foi ir no site do IBGE e copiar todas as cidades de cada estado e salvar num .txt e em seguida criei uma classe Java chamada MunicipioPopulator para ler cada .txt, que representa um estado e popular o meu banco.
Usei uma session do Hibernate para salvar os dados e para persistir o nome da uf usei o nome do arquivo, para popular o banco é só clicar com o direito em cima da classe e executar “Run>>Java Application”.
Reparei que no site dos Correios o lance é pago, então quem quiser usar esta classe com os .txt para popular seu banco, basta colocar a pasta Estados.Municipios na sua /home ou onde desejar e editar o caminho para a pasta na classe MunicipioPopulator. O download é este:
É só vc criar a sua classe Municipio, colocar a pasta onde estão os .txt (não é a pasta descompactada pelo programa que vc usa pra descompactar, têm que copiar a pasta dos .txt) onde desejar e apontar o caminho para ela na classe MunicipioPopulator, que estará dentro de algum pacote do seu projeto já existente, execute-a como uma aplicação e ela vai ler esses arquivos .txt e popular o seu banco com os estados e municípios.
Eu usei uma sessão do Hibernate pra fazer o serviço, se vc usa jdbc puro, têm que chamar a conexão ali para a aplicação popular o banco.