Шаблон для подключения к различным базам данных с использованием JDBC - PullRequest
7 голосов
/ 17 ноября 2008

Я пишу приложение, которое должно быть настраиваемым для подключения к Oracle, SQL Server и MySQL в зависимости от прихоти клиента.

До сих пор я планировал использовать мост JDBC-ODBC и просто подключаться к базам данных, используя разные строки подключения.

Мне сказали, что это не очень эффективно.

  1. Существует ли схема или лучшие практики для подключения к нескольким системам баз данных? Или для выбора, какой драйвер использовать?

  2. Должен ли я настроить его? но включить все три драйвера или построить три отдельных клиента?

Я не делаю ничего сложного, просто закачивая (вставляя) данные в базу данных из потока событий.

Ответы [ 4 ]

7 голосов
/ 17 ноября 2008

Я бы посоветовал вам сделать его настраиваемым и включить три драйвера. Вы можете использовать шаблон, подобный следующему: Создайте суперкласс (назовем его DAO), который обеспечивает функциональность подключения к базе данных. Это может быть абстрактно.

Создайте конкретный подкласс для каждого типа базы данных, к которой вы хотите подключиться. Таким образом, вы можете использовать MySQLDAO, MSSQLDAO и OracleDAO. каждый из них загружает соответствующий драйвер и использует соответствующую строку подключения.

Создайте другой класс (давайте назовем его DAOFactory) с методом getDAO (DB), который будет создавать экземпляр DAO в зависимости от значения DB.

Так, например (в псевдокоде):

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

Таким образом, любой код, который должен подключиться к базе данных, будет вызывать DAOFactory и запрашивать экземпляр DAO. Вы можете сохранить значение БД во внешнем файле (например, в файле свойств), чтобы вам не приходилось изменять код для изменения типа базы данных.

таким образом, вашему коду не нужно знать, к какому типу базы данных он подключается, и если вы решите поддерживать базу данных четвертого типа позже, вам придется добавить еще один класс и изменить DAOFactory, а не остальные твой код.

2 голосов
/ 17 ноября 2008

Если вы осторожны (и тестируете), вы можете сделать это с помощью прямого JDBC и просто изменить класс драйвера и информацию о соединении. Вы определенно хотите держаться подальше от моста JDBC-ODBC, так как он обычно медленный и ненадежный. Мост, скорее всего, будет вести себя по-разному в разных БД, чем JDBC.

Я думаю, что путь DAO излишний, если ваши требования так же просты, как перечисленные.

Если вы делаете много вставок, вы можете исследовать подготовленные операторы и пакетные обновления, поскольку они гораздо более эффективны. Это может оказаться менее портативным - трудно сказать без тестирования.

2 голосов
/ 17 ноября 2008

Если вам нужно что-то сложное, Hibernate - хороший выбор.

в противном случае, я бы сохранил данные о вашем соединении в файле свойств (или в какой-либо другой форме конфигурации), а именно: имя класса драйвера, URL JDBC, имя пользователя и пароль.

Затем все, что вам нужно сделать, это загрузить сведения о соединении из файла свойств и включить правильный JAR-файл в ваш путь к классу, и все готово.

Вы можете использовать библиотеку, такую ​​как Commons-DBCP, если хотите, чтобы ее было немного проще настроить, но кроме этого это все, что вам нужно сделать (при условии, что ваши операторы SQL работают, конечно, с каждой базой данных).

1 голос
/ 17 ноября 2008

Взгляните на Источник данных . Это предпочтительный механизм для получения соединения с базой данных.

IMO обеспечивает администраторам максимальную гибкость при выборе базы данных, пула соединений и стратегий транзакций.

Если вы используете tomcat, то смотрите здесь , чтобы узнать, как зарегистрировать источник данных в JNDI tomcat.

Если вы используете Spring, вы можете получить источник данных, используя jee:jndi-lookup.

Если вы используете Spring, но не хотите использовать JNDI, взгляните на DriverManagerDataSource , чтобы узнать, как получить объединенный источник данных (DBCP или C3P0).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...