2015-07-03 80 views
4

我正尝试使用RJDBC连接到R内部的SAS驱动的远程数据库。我第一次做dbConnect,我得到一个错误:RJDBC :: dbConnect期间Java异常错误:如何默默忽略?

Error in .jcall([email protected], "Ljava/sql/Connection;", "connect", as.character(url)[1], 
: java.lang.NoClassDefFoundError: com/sas/net/crypto/CryptoException 

当我第一次调用后做dbConnect第二次,它连接罚款,我回来JDBCConnection类的对象。

我查看了sas.core.jar文件(来自最新的94M2 SAS JDBC驱动程序),可以看到其中列出的CryptoException。不过,我也很好奇为什么它试图抛出一个CryptoException

问题1:我该如何静静地忽略第一个dbConnect调用中的错误?

问题2:为什么试图扔CryptoException?我能做些什么来防止这种情况发生? (这可能会取消的问题1)

+0

您可以更好地在communities.sas.com上发布此信息,您将拥有SAS和一些可以回答此问题的专家用户。 – Reeza

+0

谢谢!我也会在那里问。 SAS对我来说看起来很稳固,所以起初我认为在RJDBC包中捕获这种例外情况将是一个缺失的功能。我想问RJDBC家伙。 –

回答

1

这是因为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

+0

感谢.jpackage提及!我会更新它。 –

0

我有同样的问题,并试图不改变上述解决方案。 我的电脑上的解决方案是修改.Renviron文件,其中包含类路径到java驱动程序。用“WRDS_Drivers”取代“JDBC_Drivers”只需要:

CLASSPATH =“C:/Users/nicol/Documents/WRDS_Drivers/sas.core.jar; C:/ Users/nicol/Documents/WRDS_Drivers/sas .intrnet.javatools.jar“