How to create multiple database connections for different databases in java
There are multiple ways you can achieve this:
- If you are using any Java EE container which supports distributed transaction then you can use there functionality.
- If you are with plain JDBC then you will have to maintain your own connection for every database.
For JDBC:
- Provide all connection details
- Have an Facade which gives you desired object by calling a abstract generic DAO.
- Have a factory which creates dao based on connection.
- Use ORM tools like Hibernate, where you can use configuration for multiple database. Tutorial.
- If you are using Spring, then you can configure one datasource per database. Docs
Design Patterns:
- Facade Pattern - for hiding the complexity and multiple database usage.
- Factory - In case you manage the database connection yourself.
- Singleton - For datasources
As you have not tagged your question with any of this, hibernate
, JPA
, ORM
, I assume you are dealing with plain JDBC.
Having said that, I suggest you to have a DAO layer to deal with underlying databases, and leave the connection details to specific implementations. You can configure your connection strings in some .properties
files, lets say.
[Complement]
You can also make use of DAO factory, an implementation of Abstract Factory or Factory Method pattern, whichever suits here.
[Links]
- A very fine implementation of DAO and DAO Factory, by BalusC
- Core J2EE Patterns -- arguably dated but might provide some idea.
You can handle multiple connections easily using a ORM tool like Hibernate.. You can specify each connection in a separate configuration file and instantiate the required connection by getting a new session factory each time.
Other way would be to use datasource and JNDI : Java connecting to multiple databases
I think you can use a combination of Factory pattern and Singleton pattern for the purpose.