Conectar ao BD a cada operação ou no inicio e final da aplicação?

Pessoal.

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.

abs

de uma procurada sobre pool de conexões

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.