不同的<driver-class>用于相同的数据源</driver-class>

时间:2011-07-12 14:13:39

标签: java java-ee datasource

我正在编写一个从数据库读取信息的类,可能是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 个答案:

答案 0 :(得分:1)

您可以使用DatabaseMetaData类。

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

我不确定是否所有供应商都实现了这一点,但这是本课程的目的。您可以从底层连接对象获取它的句柄。

dataSource.getConnection().getMetaData()

答案 1 :(得分:0)

您可以检查数据源类。 AFAIK每个主要驱动程序都有自己的DataSource实现。

答案 2 :(得分:0)

您可以在某个属性文件中进行一些切换,或者您可以解析包含driver-class-name的初始xml文件以发现使用的数据库