Hola:
Depende de cuantas operaciones vayas a hacer con la base de datos y con qué frecuencia.
Si son operaciones muy puntuales de pascua en ramos, puedes hacer lo que comenta kipersonic0. Se abre en el momento, se hace la operación y se cierra. Puede ser el caso de una aplicación de escritorio sencilla en la que sólo se hacen transacciones sencillas con base de datos a petición del usuario (una agenda telefónica, por ejemplo).
Sin embargo, abrir una conexión con base de datos es algo que lleva un tiempo, por lo que si las operaciones van a ser frecuentes, puedes perder mucho tiempo abriendo y cerrando. En ese caso, es mejor abrir una conexión al arrancar el programa o cuando se necesite la primera vez y mantenerla abierta hasta el final. Puede ser el caso de una aplicación que recoja datos automáticamente de algún sitio con cierta frecuencia.
Finalmente, una conexión no es thread safe, por lo que si vas a usar varios hilos y vas a mantener una única conexión abierta, debes sincronizar el acceso a esa conexión. Esto, si todos los hilos quieren acceder con mucha frecuencia a la base de datos, puede hacer que estén continuamente esperando unos por otros. Por ello, si hay muchos hilos y quieren acceder con frecuencia a la base de datos, lo mejor es tener varias conexiones abiertas y asignárselas a los hilos según las vayan necesitando. De hacer esto se encargan los
pool de conexiones. Es el caso típico de una página web a la que pueden acceder montones de visitantes a la vez.
Por ello, debes estimar cuantas operaciones vas a hacer con base de datos y con qué frecuencia, para decidir qué estrategia vas a usar con las conexiones.
Se bueno.