【问题标题】:Getting the Correct version of the Oracle Driver in Groovy在 Groovy 中获取正确版本的 Oracle 驱动程序
【发布时间】:2014-02-06 00:15:22
【问题描述】:

我有一个 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 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,而不是那个?”

【问题讨论】:

  • 这听起来像是一个类路径问题。听起来您需要对类路径进行排序,因此 ojdbc6.jar 位于列表的前面。

标签: java sql oracle jdbc groovy


【解决方案1】:

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

您可以使用以下语句:

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

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

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

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

【讨论】:

  • 最终,我决定最好将我的复杂查询放在 Oracle 数据库中的一个视图中,然后在我的 Groovy 脚本中从中选择 *。
猜你喜欢
  • 2021-11-19
  • 2016-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-15
  • 1970-01-01
  • 2011-05-08
  • 1970-01-01
相关资源
最近更新 更多