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

Java 在Groovy中获取Oracle驱动程序的正确版本,java,sql,oracle,jdbc,groovy,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驱动程序 在我的机器上

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

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

def db = [url:connectionUrl, driver:"oracle.jdbc.OracleDriver", user:connectionUser, password:connectionPassword]
sql = Sql.newInstance(db) 
问题是,我的查询很复杂,并且依赖于要使用的特定版本的Oracle JDBC驱动程序

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

当我检查驱动程序版本时

println "Oracle JDBC Driver used: ${sql.getConnection().getMetaData().getDriverVersion()}" //Should be 11.x for this script to work
…脚本说它使用的是11.2.0.1.0

在我们的作业调度软件所在的远程主机上,我有一个类似的设置-ojdbc6.jar位于$GROOVY_HOME/lib文件夹中。但是,当脚本运行时,它将使用Oracle驱动程序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

十一,

二,

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

sun.jdbc.odbc。JdbcOdbcDriver@a7e0a7e

二,

一,


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

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

您可以使用以下语句:

println oracle.jdbc.OracleDriver.class.protectionDomain.codeSource.location.path
它将显示用于加载Oracle驱动程序的jar的路径。这可能与您所需的jar不同

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

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

这听起来像是类路径问题。听起来您需要对类路径进行排序,以便ojdbc6.jar位于列表的最前面。最终,我决定最好将我的复杂查询放在Oracle数据库的视图中,然后在Groovy脚本中从中选择*。