Как создать несколько соединений с базой данных для разных баз данных в Java

У меня есть приложение, которое использует четыре базы данных в разных географических точках. Все базы данных содержат одинаковые таблицы, и только имя базы данных отличается в зависимости от местоположения. Я должен создать несколько отчетов в моем приложении, которое использует данные из каждой базы данных. Как правильно создать соединение с базой данных из Java-приложения и есть ли подходящий шаблон для этой задачи, который я мог бы использовать?

Ответы на вопрос(5)

системы, такой как OLAP. Но посмотрите, можете ли вы создать представление из этих баз данных. Тогда вам просто нужно запросить представление (то есть просто одно соединение с базой данных). Также вы можете использовать несколько соединений с базой данных, если хотите.

Решение Вопроса

hibernate, JPA, ORM, Я полагаю, ты имеешь дело с простым JDBC.

Говоря это, я предлагаю вам иметь слой DAO для работы с базовыми базами данных и оставить детали подключения для конкретных реализаций. Вы можете настроить строки подключения в некоторых.properties файлы, скажем так.

[Комплемент]

Вы также можете использовать фабрику DAO, реализацию шаблона Abstract Factory или Factory Mathod, в зависимости от того, что здесь подходит.

[Ссылка]

Очень хорошая реализация DAO и DAO Factory, по BalusC Core J2EE Patterns - возможно, от, но может дать некоторую идею.
 Ashish K Agarwal15 мая 2012 г., 05:32
но тогда как у тебя будет несколько дБ соединений?
 Adeel Ansari15 мая 2012 г., 05:37
@ munna: каждая реализация DAO будет знать свой источник данных.

Если вы используете какой-либо контейнер Java EE, который поддерживает распределенные транзакции, то вы можете использовать его функциональность. Если вы работаете с обычным JDBC, вам придется поддерживать собственное соединение для каждой базы данных. Для JDBC: Предоставить все детали подключения Имейте Фасад, который дает вам желаемый объект, вызывая абстрактный обобщенный DAO. Есть фабрика, которая создает дао на основе соединения. Используйте инструменты ORM, такие как Hibernate, где вы можете использовать конфигурацию для нескольких баз данных.Руководств. Если вы используете Spring, то вы можете настроить один источник данных для каждой базы данных. Docs

Шаблоны проектирования

Facade Pattern - для сокрытия сложности и многократного использования базы данных.Factory - если вы сами управляете подключением к базе данных.Singleton - Для источников данных

1.Создать источник данных, чтобы попытаться подключиться к БД

public DataSource getDataSource(String db) throws Exception {
DataSource dt = null;
InitialContext ic = null;
try {
    if(db.trim().equals("you_database_name")) {
        dt = (DataSource)ic.lookup("jdbc/connection_name");
    } else if(db.trim().equals("you_database_name")) {
        dt = (DataSource) ic.lookup("jdbc/connection_name");
    }
    return dt;
} catch(NamingException n) {
    throw new Exception("Err getDataSource (ServiceLocator) NamingException - " + n.getMessage());
}

2.Создайте класс DataBase, не забудьте закрыть все соединения в этой точке.

public class DataBases {
public YouNameDataSourceClass dataSrc;
public DataBases() throws Exception {
   super();
   dataSrc = new YouNameDataSourceClass.getDataSource();
}
public Connection getConnectionAS400() throws Exception {
    return locator.getDataSource("you_database_name").getConnection();
}

public Connection getConnectionOracle() throws Exception {
    return locator.getDataSource("you_database_name").getConnection();
}

public Connection getConnectionSQLServer() throws Exception {
    return locator.getDataSource("you_database_name").getConnection();
}
}

Хорошо выглядишь.

а ORM, такого как Hibernate. Вы можете указать каждое соединение в отдельном файле конфигурации и создать экземпляр необходимого соединения, каждый раз получая новую фабрику сеансов.

Другой способ - использовать источник данных и JNDI: Java подключение к нескольким базам данных

Я думаю, что вы можете использовать комбинацию Factory pattern и Singleton для этой цели.

Ваш ответ на вопрос