我正在尝试使用 RJDBC 从 R 中连接到 SAS 驱动的远程数据库。我第一次执行 a 时dbConnect,出现错误:
Error in .jcall(drv@jdrv, "Ljava/sql/Connection;", "connect", as.character(url)[1],
: java.lang.NoClassDefFoundError: com/sas/net/crypto/CryptoException
Run Code Online (Sandbox Code Playgroud)
当我dbConnect在第一次调用后第二次执行时,它连接正常,并且我返回一个 class 对象JDBCConnection。
我查看了sas.core.jar文件(来自最新的 94M2 SAS JDBC 驱动程序),并且可以看到其中CryptoException列出的内容。但是,我也很好奇为什么它试图抛出一个CryptoException.
问题 1:如何在第一次dbConnect调用时默默忽略错误?
问题 2:它为什么要尝试抛出CryptoException?我能做些什么来防止这种情况?(这可能会取消问题 1。)
小智 2
这与 SAS 支持社区页面上共享的问题相同:
https://communities.sas.com/thread/80620
在那里您分享了您正在使用的代码
https://github.com/wthielen/wrds/blob/7edfbfe89ddc329618be72e591cc0bd50e294ea4/R/wrds.R#L47
在此代码中,问题似乎是您尝试在初始化 JVM 之前设置类路径。在调用 .jaddClassPath 之前使用 .jinit() 应该可以解决此问题。在 .jinit 的文档中,由于您正在开发一个包,因此您可能需要使用 .jpackage 而不是 .jinit
https://www.rforge.net/doc/packages/rJava/jpackage.html