обобщенный код для подключения к базам данных с помощью jdbc4? - PullRequest
0 голосов
/ 02 января 2012

Я занимаюсь разработкой приложения, которое имитирует кубы данных и их работу. Для этого приложения мне нужно обеспечить поддержку различных механизмов баз данных, таких как PostgreSQL, MySQL и т. Д. Я планировал предоставить интерфейс, где пользователь сможет выбрать движок и указать его детали.

Мне удалось подключиться к PostgreSQL с помощью доступного драйвера JDBC4. Для этого соединения мне пришлось скомпилировать программный код, включив драйвер .jar в classpath во время компиляции. Но приложение как продукт должно работать на JRE, и не нужно перекомпилировать код. Это возможно?

Приложение также должно настраиваться на более новые версии драйверов и механизмов, доступных для базы данных. Как это можно сделать?

Ответы [ 3 ]

1 голос
/ 02 января 2012

для этого соединения мне пришлось скомпилировать программный код, включив драйвер .jar в classpath во время компиляции.

Вам не нужно делать это,В этом весь смысл JDBC.Вы должны предоставить имя класса драйвера (и URL-адрес соединения, имя пользователя и / или пароль) в виде строки, которую можно получить из некоторого внешнего файла конфигурации (свойств?).Например,

String driverClassName = getItFromConfigurationFileSomehow();
Class.forName(driverClassName);
// ...

Более того, поскольку в JDBC4 Class#forName() вообще не требуется.Просто поместите драйвер JDBC в путь к классу среды выполнения и позвольте API ServiceLoader автоматически загружать драйвер.

Вам нужно всего лишь переписать код в only use java.sqlинтерфейсы / классы, такие как java.sql.Connection и т. д. вместо org.postgresql интерфейсы / классы, так что вам не нужен драйвер JDBC во время компиляции.Другими словами, у вас не должно быть единой строки кода, которая импортирует / ссылается на определенные интерфейсы / классы драйвера JDBC.

1 голос
/ 02 января 2012

Вы можете загрузить класс драйвера с помощью отражения, как упомянуто BalusC, после этого вы можете использовать DriverManager для получения соединения. Затем вы придерживаетесь интерфейсов java.sql или javax.sql, и вам следует идти вперед.

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

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

Код вашей библиотеки базы данных просто должен использовать API источника данных для получения соединения, а затем интерфейсы java [x] .sql для управления базой данных. Таким образом, разница только в способе получения соединения с базой данных.

0 голосов
/ 02 января 2012

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

St-Toolkit

Вы можете посмотреть на него для вдохновения:

Javadoc

...