R:连接到Teradata时JDBC()找不到Java驱动程序路径 [英] R: JDBC() not finding Java drivers path when connecting to Teradata

查看:596
本文介绍了R:连接到Teradata时JDBC()找不到Java驱动程序路径的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试通过RStudio连接到Teradata,但是由于某种原因,JDBC函数在识别Java驱动程序所在的路径时遇到了问题.请参见下面的代码:

I'm trying to connect to Teradata through RStudio, but for some reason JDBC function has problems recognizing the path where Java drivers sit. See the code below:

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调用中时...

But when I paste those paths in JDBC call...

# 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")

...我收到以下错误:

... I get the following error:

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") -尝试使用类路径"/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"吗?否

RJavaClassLoader: added '/Users/KULMAK/Documents/TeraJDBC__indep_indep.16.10.00.03/tdgssconfig.jar;/Users/KULMAK/Documents/TeraJDBC__indep_indep.16.10.00.03/terajdbc4.jar' to the URL class path loader WARNING: the path '/Users/KULMAK/Documents/TeraJDBC__indep_indep.16.10.00.03/tdgssconfig.jar;/Users/KULMAK/Documents/TeraJDBC__indep_indep.16.10.00.03/terajdbc4.jar' does NOT exist, it will NOT be added to the internal class path! RJavaClassLoader: added '/Library/Frameworks/R.framework/Versions/3.4/Resources/library/RJDBC/java/RJDBC.jar' to the URL class path loader RJavaClassLoader: adding Java archive file '/Library/Frameworks/R.framework/Versions/3.4/Resources/library/RJDBC/java/RJDBC.jar' to the internal class path RJavaClassLoader@3d4eac69.findClass(com.teradata.jdbc.TeraDriver) - URL loader did not find it: java.lang.ClassNotFoundException: com.teradata.jdbc.TeraDriver RJavaClassLoader.findClass("com.teradata.jdbc.TeraDriver") - trying class path "/Library/Frameworks/R.framework/Versions/3.4/Resources/library/rJava/java" Directory, can get '/Library/Frameworks/R.framework/Versions/3.4/Resources/library/rJava/java/com/teradata/jdbc/TeraDriver.class'? NO - trying class path "/Library/Frameworks/R.framework/Versions/3.4/Resources/library/RJDBC/java/RJDBC.jar" JAR file, can get 'com/teradata/jdbc/TeraDriver'? NO

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

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

Running the same code in R, rather than RStudio, returns the same error.

还要重新安装RJDBC软件包(如建议的​​此处 )无法解决问题.

Also, re-installing RJDBC package (as suggested here) didn't solve the issue.

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

Can anyone explain why this is happening? Thanks for help.

这是我的会话信息:

> 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

推荐答案

这是路径中的错误-您无意间将两条路径粘贴在一起(注意路径之间的分号).你可能打算

That's a mistake in the path - you have inadvertently pasted two paths together (note the semicolon between the paths). You probably intended

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"))

这篇关于R:连接到Teradata时JDBC()找不到Java驱动程序路径的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆