другой ‹драйвер-класс› для одного и того же источника данных

Я пишу класс, читающий информацию из базы данных, которая может быть 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>

or

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

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

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

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

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

Спасибо


person Francesco    schedule 12.07.2011    source источник


Ответы (3)


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

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

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

dataSource.getConnection().getMetaData()
person Kal    schedule 12.07.2011
comment
Спасибо, я воспользовался этим предложением :) - person Francesco; 27.07.2011
comment
@Francesco - пожалуйста. Не забудьте отметить как правильный ответ :-) - person Kal; 27.07.2011

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

person Thomas    schedule 12.07.2011

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

person jnr    schedule 12.07.2011