разные <driver-class> для одного и того же источника данных - PullRequest
1 голос
/ 12 июля 2011

Я пишу класс, читающий информацию из базы данных, которая может быть oracle или mysql.Я использую javax.sql.DataSource и код вроде:

ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("java:personalDS");
Connection conn = ds.getConnection();

После этого мне нужно выполнить какой-то запрос, но они должны отличаться в случае, если я использую oracle или mysql ds.XML-файл будет содержать:

<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>

или

<driver-class>com.mysql.jdbc.Driver</driver-class>

Я хотел бы написать что-то вроде

if (ds.getDriver().contains("mysql") {...}
else if (ds.getDriver().contasins("Oracle") {...}

, но метод getDriver не существует .... также из контекста я не понимаю, как «получить» свойство класса драйвера моего ресурса.

Есть ли у вас какие-либо предложения?

Спасибо

Ответы [ 3 ]

1 голос
/ 12 июля 2011

Вы можете использовать класс DatabaseMetaData.

http://download.oracle.com/javase/1.4.2/docs/api/java/sql/DatabaseMetaData.html

Я не уверен, что все поставщики реализуют это, но это намерение для этого класса. Вы можете получить дескриптор к нему из базового объекта соединения.

dataSource.getConnection().getMetaData()
0 голосов
/ 12 июля 2011

У вас может быть какой-то переключатель в некотором файле свойств, или вы можете проанализировать исходный xml-файл, содержащий имя-класса-драйвера, чтобы выяснить, какая база данных используется

0 голосов
/ 12 июля 2011

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

...