Estou iniciando a trabalhar BD e java e tenho uma dúvida.
Devo abrir e fechar a conexão com o BD a cada operação. Faço um select (abro e fecho), faço um insert (abro e fecho), etc?
Ou abro a conexão ao iniciar a aplicação e só fecho antes de sair da aplicação?
Depende. Você vai utilizar alguma API de persistência? Se sim, ela com certeza deve ter uma funcionalidade que aumenta a eficiência no acesso ao banco.
Como o amigo acima falou, se você estiver usando alguma API como o hibernate, por exemplo, você não precisa se preocupar.
Agora se está fazendo na unha, seria interessante. Pois evitaria muitas dores de cabeça.
Se você não estiver usando nenhum framework pra facilitar o serviço então o melhor a se fazer é a sua opção 2. Nesse caso procure criar um modulo que gerencie o acesso ao banco, verificando se a conexão está ou não ativa, etc.