我有一个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,而不是那个?”
答案 0 :(得分:2)
似乎是类路径问题。尝试在运行时找到包含oracle.jdbc.OracleDriver类的jar。
您可以使用以下声明:
println oracle.jdbc.OracleDriver.class.protectionDomain.codeSource.location.path
它将显示用于加载Oracle驱动程序的jar的路径。这可能与您所需的jar有所不同。
您可以从系统属性获取整个类路径:
System.getProperty("java.class.path")