R:JDBC()在连接到Teradata

时间:2018-03-06 13:41:46

标签: java r jdbc teradata

我试图通过RStudio连接到Teradata,但由于某种原因,JDBC功能在识别Java驱动程序所在的路径时遇到了问题。请参阅以下代码:

library(RODBC)
library(RJDBC)
library(rJava)

# both Java drivers definitely exist 
file.exists('/Users/KULMAK/Documents/TeraJDBC__indep_indep.16.10.00.03/tdgssconfig.jar')
[1] TRUE

file.exists('/Users/KULMAK/Documents/TeraJDBC__indep_indep.16.10.00.03/terajdbc4.jar')
[1] TRUE

但是当我在JDBC调用中粘贴这些路径时......

# allow more elaborated error messages to appear 
.jclassLoader()$setDebug(1L) 

drv = JDBC("com.teradata.jdbc.TeraDriver","/Users/KULMAK/Documents/TeraJDBC__indep_indep.16.10.00.03/tdgssconfig.jar;/Users/KULMAK/Documents/TeraJDBC__indep_indep.16.10.00.03/terajdbc4.jar")

...我收到以下错误:

  

RJavaClassLoader:已添加   ' /Users/KULMAK/Documents/TeraJDBC__indep_indep.16.10.00.03/tdgssconfig.jar; /Users/KULMAK/Documents/TeraJDBC__indep_indep.16.10.00.03/terajdbc4.jar'   到URL类路径加载器警告:路径   '的 /Users/KULMAK/Documents/TeraJDBC__indep_indep.16.10.00.03/tdgssconfig.jar;/Users/KULMAK/Documents/TeraJDBC__indep_indep.16.10.00.03/terajdbc4.jar'   不存在,它不会被添加到内部类路径!   RJavaClassLoader:已添加   ' /Library/Frameworks/R.framework/Versions/3.4/Resources/library/RJDBC/java/RJDBC.jar'   到URL类路径加载器RJavaClassLoader:添加Java归档文件   文件   ' /Library/Frameworks/R.framework/Versions/3.4/Resources/library/RJDBC/java/RJDBC.jar'   到内部类路径   RJavaClassLoader@3d4eac69.findClass(com.teradata.jdbc.TeraDriver)     - URL加载器找不到它:java.lang.ClassNotFoundException:com.teradata.jdbc.TeraDriver   RJavaClassLoader.findClass(" com.teradata.jdbc.TeraDriver&#34)     - 尝试课程路径" /Library/Frameworks/R.framework/Versions/3.4/Resources/library/rJava/java"   目录,可以得到   ' /Library/Frameworks/R.framework/Versions/3.4/Resources/library/rJava/java/com/teradata/jdbc/TeraDriver.class' ;?   没有     - 尝试课程路径" /Library/Frameworks/R.framework/Versions/3.4/Resources/library/RJDBC/java/RJDBC.jar"   JAR文件,可以获得' com / teradata / jdbc / TeraDriver'? NO

     
    
      

ClassNotFoundException .jfindClass中的错误(as.character(driverClass)[1]):找不到类

    
  

在R中运行相同的代码而不是RStudio,会返回相同的错误。

此外,重新安装RJDBC软件包(如建议的here)并没有解决问题。

任何人都可以解释为什么会这样吗?谢谢你的帮助。

这是我的会话信息:

> sessionInfo()
R version 3.4.1 (2017-06-30)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: macOS High Sierra 10.13.3

Matrix products: default
BLAS: /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/3.4/Resources/lib/libRlapack.dylib

locale:
[1] en_GB.UTF-8/en_GB.UTF-8/en_GB.UTF-8/C/en_GB.UTF-8/en_GB.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] devtools_1.13.4 RJDBC_0.2-7     rJava_0.9-9     DBI_0.8         RODBC_1.3-15   
[6] dplyr_0.7.4     readr_1.1.1    

loaded via a namespace (and not attached):
 [1] Rcpp_0.12.15     bindr_0.1        magrittr_1.5     hms_0.3          R6_2.2.2        
 [6] rlang_0.1.6      httr_1.3.1       tools_3.4.1      git2r_0.19.0     withr_2.1.1.9000
[11] yaml_2.1.16      assertthat_0.2.0 digest_0.6.15    tibble_1.4.2     bindrcpp_0.2    
[16] curl_3.0         memoise_1.1.0    glue_1.2.0       compiler_3.4.1   pillar_1.1.0    
[21] pkgconfig_2.0.1

2 个答案:

答案 0 :(得分:4)

这是路径中的一个错误 - 你无意中粘贴了两条路径(注意路径之间的分号)。你可能打算

drv <- JDBC("com.teradata.jdbc.TeraDriver",
  c("/Users/KULMAK/Documents/TeraJDBC__indep_indep.16.10.00.03/tdgssconfig.jar",
    "/Users/KULMAK/Documents/TeraJDBC__indep_indep.16.10.00.03/terajdbc4.jar"))

请注意,只需使用

即可让您的生活更轻松
drv <- JDBC("com.teradata.jdbc.TeraDriver", Sys.glob("/Users/KULMAK/Documents/TeraJDBC__indep_indep.16.10.00.03/*.jar"))

答案 1 :(得分:1)

这对我有用。只需确保两个jar都位于引用的目录中即可。

library(RJDBC)
drv <- RJDBC::JDBC(driverClass = "com.teradata.jdbc.TeraDriver", classPath =  Sys.glob("~/drivers/teradata/*"))
conn <- dbConnect(drv,'jdbc:teradata://<server>/<db>',"un","pw")
result.df<- dbGetQuery(conn,"select * from table")