在Groovy中获取正确版本的Oracle驱动程序

时间:2014-02-05 15:23:12

标签: java sql oracle jdbc groovy

我有一个groovy脚本连接到Oracle数据库,执行查询,然后将内容写入CSV文件。

我正在连接数据库,如下所示:

def db = [url:connectionUrl, driver:"oracle.jdbc.OracleDriver", user:connectionUser, password:connectionPassword]
sql = Sql.newInstance(db) 

问题是,我的查询很复杂,并且依赖于正在使用的特定版本的Oracle JDBC驱动程序。

在我的机器上,我在类路径中需要ojdbc6.jar(oracle jdbc驱动程序的版本)($ GROOVY_HOME / lib /)。它加载正常,脚本工作。

当我检查驱动程序版本时......

println "Oracle JDBC Driver used: ${sql.getConnection().getMetaData().getDriverVersion()}" //Should be 11.x for this script to work

...脚本说它正在使用11.2.0.1.0。

在我们的作业调度软件所在的远程主机上,我有一个类似的setup-ojdbc6.jar位于$ GROOVY_HOME / lib文件夹中。但是,当脚本运行时,它使用Oracle Driver 9.2.0.6.0进行报告。

如何指定构建连接时要使用的Oracle JDBC驱动程序的版本?

我尝试过什么

使用java.sql.DriverManager类,我试图枚举我的脚本可用的驱动程序:

DriverManager.getDrivers().toList().each{
    println it
    println it?.majorVersion        
    println it?.minorVersion        
}

在我的机器上,输出:

  

oracle.jdbc.OracleDriver@5ff8cef

     

11

     

2

在作业调度服务器上,我得到:

  

sun.jdbc.odbc.JdbcOdbcDriver@a7e0a7e

     

2

     

1

如何告诉Java / Groovy“使用这个 jdbc,而不是那个?”

1 个答案:

答案 0 :(得分:2)

似乎是类路径问题。尝试在运行时找到包含oracle.jdbc.OracleDriver类的jar。

您可以使用以下声明:

println oracle.jdbc.OracleDriver.class.protectionDomain.codeSource.location.path

它将显示用于加载Oracle驱动程序的jar的路径。这可能与您所需的jar有所不同。

您可以从系统属性获取整个类路径:

System.getProperty("java.class.path")