una probar getconnection drivermanager datos conexion conectar como clase cadena java jdbc

java - probar - Patrón para conectarse a diferentes bases de datos usando JDBC



java mysql (4)

Estoy escribiendo una aplicación que debe ser configurable para conectarse a Oracle, SQL Server y MySQL dependiendo del capricho del cliente.

Hasta ahora había planeado 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. ¿Existe algún patrón o mejor práctica para conectarse a múltiples sistemas de bases de datos? ¿O para seleccionar qué controlador usar?

  2. ¿Debería 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 desde una secuencia de eventos.


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

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

Si usa tomcat, consulte aquí cómo registrar un Datasource con JNDI de tomcat.

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

Si está utilizando Spring, pero no desea usar JNDI, eche un vistazo a DriverManagerDataSource para ver una discusión sobre cómo obtener un Datasource agrupado (DBCP o C3P0).


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

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

Entonces, 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 usar 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 cada base de datos, por supuesto).


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.


Sugeriría 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.

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

Entonces, por ejemplo (en Pseudocódigo):

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

Por lo tanto, cualquier código que necesite conectarse a la base de datos llamará a DAOFactory y solicitará 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.

De esta manera, su código no necesita saber a qué tipo de base de datos se está conectando, y si luego decide admitir un cuarto tipo de base de datos, deberá agregar una clase más y modificar DAOFactory, no el resto de su código.