Separando SQL del código Java

Este es un problema que siempre encuentro cuando tengo que conectarme a una base de datos; ¿Cómo separar SQL del código java normal? Usualmente uso una clase separada para las conexiones de la base de datos, sin embargo, cuando tiene varias bases de datos y varias tablas en cada base de datos, siempre es difícil hacer esto al 100%.

Como ejemplo, si queremos poner todo el java SQL en una clase llamada DBConnector.java, ¿cómo codificamos genéricamente para diferentes inserciones, eliminaciones, recuperación de datos, etc.? Lo que creo que es el caso ideal es que todas las sentencias de SQL deberían estar en la misma clase y deberían ser compatibles con diferentes tipos de operación dentro del alcance de la aplicación de la base de datos, proporcionando así una separación lógica del resto del código.

public void insertData (String db, String table, <Whatever Fields to be Inserted>)
{
  //generic SQL INSERT statement and execution 
}

public ResultSet retrieveData (String db, String table, <Whatever Fields Relevant>) 
{
  //generic retrieval of data
}

¿Hay alguna forma de lograr esto? ¿O deberíamos simplemente agregar funcionalidad para diferentes tipos de Inserción, Consultas, etc.?

¡Gracias!

Respuestas a la pregunta(4)

Su respuesta a la pregunta