【问题标题】:Connecting to MS SQL Server from R on Mac/Linux在 Mac/Linux 上从 R 连接到 MS SQL Server
【发布时间】:2013-01-08 21:50:50
【问题描述】:

我正在尝试在 Mac/Linux 上从 R 连接到 Microsoft SQL Server,但我遇到了 RJDBC 问题。当我下载了 Microsoft 的驱动程序和 JTDS,但以下行都不起作用时:

library(RJDBC)

drv <- JDBC("com.microsoft.sqlserver.jdbc.SQLServerDriver",
            "/Users/victor/Downloads/sqljdbc_3.0/enu/sqljdbc4.jar") 

drv1 <- JDBC('net.sourceforge.jtds.jdbc.Driver',
           "/Users/victor/Downloads/jtds-1/jtds-1.3.0.jar")

每一个都返回如下错误信息:

Error in .jfindClass(as.character(driverClass)[1]) : class not found

我怀疑问题可能与错误的 Java 版本有关:我的默认 Java 是

$ java -version
java version "1.7.0_11"
Java(TM) SE Runtime Environment (build 1.7.0_11-b21)
Java HotSpot(TM) 64-Bit Server VM (build 23.6-b04, mixed mode)

但我的机器上也安装了 Java 1.6。我安装了 SquirrelSQL,它使用 JTDS 驱动程序连接到 MS SQL Server 没有任何问题; SquirrelSQL 运行的 Java 版本是 1.7.0.11。

我运行了R CMD javareconf,结果如下:

$ R CMD javareconf
Java interpreter : /usr/bin/java
Java version     : 1.7.0_11
Java home path   : /Library/Java/JavaVirtualMachines/jdk1.7.0_11.jdk/Contents/Home/jre
Java compiler    : /usr/bin/javac
Java headers gen.: /usr/bin/javah
Java archive tool: /usr/bin/jar
Java library path: 
JNI linker flags : -framework JavaVM
JNI cpp flags    : -I$(JAVA_HOME)/include

Updating Java configuration in /Library/Frameworks/R.framework/Resources
Done.

并再次删除/安装 RJDBC 和 rJava 包,但仍然没有任何效果。

我想我现在被困住了,因为我对 Java/RJDBC 及其交互不是很熟悉。谷歌搜索发现有几个人有类似的问题,但没有解决方案。

任何关于如何使 JDBC 正常运行的提示,或任何其他从 R 连接到 MS SQL Server 的方法,我们将不胜感激!

更新 1。好吧,第一条语句现在似乎可以工作了——我正在建立一个连接,并且可以毫无问题地查询数据库。不确定是什么解决了问题 - 可能我需要重新启动我的 mac/R 会话。第二条语句仍然不起作用,并显示相同的错误消息。

【问题讨论】:

  • 当我从 R 3 更改为 pqR 时出现此错误。对于解决方案,我所能提供的只是使用locate sqljdbc4.jar 来查找需要加载的内容。

标签: r rjdbc


【解决方案1】:
 library(RJDBC) 
 cp <- c
 ( 
      "<usr path>/jdbc/mdb/log4j.jar", 
      "<usr path>/jdbc/mdb/commons_lang.jar", 
      "<usr path>/jdbc/mdb/commons_logging.jar" 
  ) 

 .jinit(classpath=cp) 

 drv <- JDBC("com.microsoft.sqlserver.jdbc.SQLServerDriver",
        "/Users/victor/Downloads/sqljdbc_3.0/enu/sqljdbc4.jar") 

【讨论】:

  • 谢谢巴布劳。在这种情况下, 是什么?
  • 我在我的硬盘上找到了唯一一个有 log4j.jar 等的地方:/Users/victor/ARIS71/DownloadClient/170.194.12.195/jdbc/mdb/(不确定 ARIS71 是什么)。我添加了您建议的行,但仍然没有任何效果。 Microsoft 库也停止工作,尽管它就在昨天我发布更新时工作。我完全感到困惑。
【解决方案2】:

我已经为此苦苦挣扎了一段时间。这是我发现的。

  1. here 下载 -- 适用于 SQL 服务器的 Microsoft JDBC 驱动程序
  2. 解压缩文件,您将在其中找到sqljdbc4.jar
  3. 用途:

    drv <- JDBC("com.microsoft.sqlserver.jdbc.SQLServerDriver", "<wherever sqljdbc4.jar is>")
    

这应该可行。

如果我是对的,我的想法是对于drv 函数中的PATH 变量,需要指定JDBC 驱动程序所在的路径(所以如果没有,则首先下载它)。否则,将收到常见的class not find 错误。

【讨论】:

    【解决方案3】:

    我在 Linux 上使用 jtds-1.3.1 时遇到了这个问题。当我尝试切换到 jtds-1.2.7 时问题消失了。 jtds-1.3.* 中似乎有一些东西使它与 RJDBC 不兼容。

    【讨论】:

      【解决方案4】:

      以下代码实现了从 Mac OS x 连接到 R 的目标。 从 Microsofthere 下载 Microsoft JDBC 驱动程序

      Link to Gist / Code in Github

      # install.packages("RJDBC",dep=TRUE)
      library(RJDBC)
      drv <- JDBC("com.microsoft.sqlserver.jdbc.SQLServerDriver" , "/Users/johndacosta/Downloads/sqljdbc_4.0/enu/sqljdbc4.jar" ,identifier.quote="`")
      conn <- dbConnect(drv, "jdbc:sqlserver://192.172.1.210:55158;databaseName=master", "sa", "password")
      d <- dbGetQuery(conn, "select * from sys.databases where database_id <= 4 ")
      summary(d)
      

      【讨论】:

        【解决方案5】:

        我之前尝试使用 RJDBC 连接到 Cassandra 时也发生了同样的错误,通过将 Cassandra JDBC 依赖项放入您的 JAVA ClassPath 中得到了解决。

        看到这个answer

        【讨论】:

          【解决方案6】:

          我遇到了完全相同的问题。这是jTDS 解决方案:

          1. 下载jTDS 1.2.8并解压。假设它保存在~/Downloads/jtds-1.2.8-dist/jtds-1.2.8.jar注意:其他版本可能无法使用!
          2. 来自R,设置驱动:drv &lt;- JDBC("net.sourceforge.jtds.jdbc.Driver", "~/Downloads/jtds-1.2.8-dist/jtds-1.2.8.jar")
          3. 设置连接对象:conn &lt;- dbConnect(drv, "jdbc:jtds:sqlserver://servername:port;DatabaseName=databasename", domain="windows domain", user="user", password="pwd")

          domain 字段把事情搞砸了。你不能把domain\username 作为你的user。您必须根据jTDS driver implementation单独定义它们。

          【讨论】:

          • 对我来说 - 由于 rJava 未找到但正在 R 中工作,因此闪亮会引发错误。
          猜你喜欢
          • 1970-01-01
          • 2010-10-05
          • 2012-08-11
          • 1970-01-01
          • 1970-01-01
          • 2014-12-25
          • 2019-12-30
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多