Могу ли я столкнуться с какими-либо проблемами с обоими драйверами, доступными в classpath вместе?
Вряд ли. Метод DriverManager.getConnection
фактически делегирует построение соединения всем зарегистрированным в нем драйверам. Только драйверы, которые распознают протоколы в URL JDBC, будут возвращать соединение. Спецификация JDBC гласит:
Когда DriverManager
пытается
установить соединение, это вызывает
метод подключения водителя и передает
Драйвер URL. Если Driver
реализация понимает URL, это
вернет объект Connection
;
в противном случае возвращается null
.
...
Формат URL JDBC:
jdbc:<subprotocol>:<subname>
В случае как jTDS, так и Oracle (тонкого) драйвера, форматы протокола различны, и, следовательно, у вас никогда не возникнет проблемы. Однако не забывайте размещать более одной версии одного и того же драйвера.
Это разумный подход или есть лучший дизайн / шаблон для этого?
Вы ищете DataSource
. Источники данных были бы доступны в среде Java EE, а не в приложениях Java SE. Однако вы можете создать свой собственный DataSource или аналогичный класс; вам не нужно реализовывать сам интерфейс DataSource, но вы можете сделать что-то подобное. В вашем контексте ваш ConnectionManager
класс возьмет на себя роль источника данных, возможно, приняв параметр, который определяет, к какой базе данных подключаться; вы можете подумать об использовании пула соединений, если он вам нужен (маловероятно, если вам нужно только одно соединение с базой данных).
Вы также можете принять подход @ duffymo к созданию классов DAO, хотя он лучше подходит для ситуации, когда запросы SQL отличаются.