我正在编写一个从数据库读取信息的类,可能是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不存在....也来自上下文我不明白'获取'我的资源的驱动程序类属性。
你有什么建议吗?
三江源
答案 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文件以发现使用的数据库