2008-11-17 16 views
7

Estoy escribiendo una aplicación que debe ser configurable para conectarse a Oracle, SQL Server y MySQL dependiendo del capricho del cliente.Patrón para conectar a diferentes bases de datos usando JDBC

Hasta ahora había estado planeando usar el puente JDBC-ODBC y simplemente conectarme a las bases de datos usando diferentes cadenas de conexión.

Me dijeron que esto no es muy eficiente.

  1. ¿Hay un patrón o mejores prácticas para la conexión a múltiples sistemas de bases de datos? ¿O para seleccionar qué controlador usar?

  2. ¿Debo tenerlo configurable? pero incluye los tres controladores o crea tres clientes por separado

No estoy haciendo nada complejo simplemente bombeando (insertando) datos en la base de datos de un flujo de eventos.

Respuesta

7

Le sugiero que lo haga configurable e incluya los tres controladores. Puede usar un patrón como este: crear una superclase (llamémoslo DAO) que proporcione la funcionalidad de conectarse a la base de datos. Esto podría ser abstracto.

Cree una subclase concreta para cada tipo de base de datos a la que desee conectarse. Entonces puede terminar con MySQLDAO, MSSQLDAO y OracleDAO. cada uno cargará el controlador respectivo y usará su cadena de conexión respectiva.

Crea otra clase (vamos a llamarla DAOFactory) con un método getDAO (DB) que creará una instancia de DAO dependiendo del valor de DB.

Así, por ejemplo (en pseudocódigo):

if(DB.equals("MySQL")){ 
    DAO = new MySQLDAO(); 
} 
return DAO; 

Por lo que cualquier código que necesita para conectarse a la base de datos llamará a la DAOFactory y pedir una instancia de DAO. Puede almacenar el valor de DB en un archivo externo (como un archivo de propiedades) para que no tenga que modificar el código para cambiar el tipo de base de datos.

esta manera su código no necesita saber qué tipo de base de datos se conecta a, y si decide apoyar a un cuarto tipo de base de datos más adelante se tendrá que añadir una clase más y modificar el DAOFactory, no el resto de tu código

2

Si necesita algo complejo, Hibernate es una buena opción.

De lo contrario, lo que haría es almacenar los detalles de su conexión en un archivo de propiedades (o alguna otra forma de configuración), a saber: nombre de clase del controlador, URL de JDBC, nombre de usuario y contraseña.

Luego, todo lo que necesita hacer es cargar los detalles de conexión de su archivo de propiedades e incluir el archivo JAR correcto en su classpath y listo.

Puede utilizar una biblioteca como Commons-DBCP si desea que sea un poco más fácil de configurar, pero aparte de eso, es todo lo que necesita hacer (siempre que sus instrucciones SQL funcionen en todas las bases de datos, por supuesto).

1

Eche un vistazo a Datasource. Este es el mecanismo preferido para obtener una conexión de base de datos.

IMO esto proporciona al administrador la mayor flexibilidad para elegir la base de datos, la agrupación de conexiones y las estrategias de transacción.

Si está utilizando tomcat, vea here para saber cómo registrar un Datasource con JNDI de tomcat.

Si está utilizando Spring, puede obtener un Datasource usando jee:jndi-lookup.

Si está utilizando Spring, pero no desea utilizar JNDI, consulte DriverManagerDataSource para obtener una explicación sobre cómo obtener un origen de datos agrupado (DBCP o C3P0).

+0

¡El enlace que proporcionó para la fuente de datos está dando 404! –

+0

Se corrigieron los enlaces. Gracias Paresh. – toolkit

2

Si tiene cuidado (y prueba), puede hacerlo con JDBC directo y simplemente modificar la clase de controlador y la información de conexión. Definitivamente quiere mantenerse alejado del puente JDBC-ODBC, ya que generalmente es lento y poco confiable. Es más probable que el puente se comporte de forma diferente en dbs que JDBC.

Creo que la ruta DAO es excesiva si sus requisitos son tan simples como los que figuran en la lista.

Si está haciendo muchas inserciones, es posible que desee investigar las declaraciones preparadas y las actualizaciones por lotes, ya que son mucho más eficientes. Esto podría terminar siendo menos portátil, difícil de decir sin pruebas.

Cuestiones relacionadas