Java 在Groovy中获取Oracle驱动程序的正确版本
我有一个groovy脚本,它连接到Oracle数据库,执行查询,然后将内容写入CSV文件 我正在连接数据库,如下所示: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驱动程序 在我的机器上
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脚本中从中选择*。