簡體   English   中英

在 Mac/Linux 上從 R 連接到 MS SQL Server

[英]Connecting to MS SQL Server from R on Mac/Linux

我正在嘗試從 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 會話。 第二個語句仍然不起作用,並顯示相同的錯誤消息。

我已經為此苦苦掙扎了一段時間。 這是我發現的。

  1. 這里下載——用於 SQL 服務器的 Microsoft JDBC 驅動程序
  2. 解壓縮文件,您將在其中找到sqljdbc4.jar
  3. 采用:

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

這應該有效。

如果我是對的,想法是對於drv函數中的PATH變量,需要指定 JDBC 驅動程序所在的 PATH (因此,如果沒有,則首先下載它)。 否則,將收到公共class not find錯誤。

以下代碼實現了從 Mac OS x 連接到 R 的目標。 此處從 Microsoft 下載 Microsoft JDBC 驅動程序

鏈接到 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)

我在 Linux 上使用 jtds-1.3.1 時遇到了這個問題。 當我嘗試切換到 jtds-1.2.7 時,問題就消失了。 看起來 jtds-1.3.* 中有一些東西使它與 RJDBC 不兼容。

我有同樣的問題。 這是一個jTDS解決方案:

  1. 下載jTDS 1.2.8並解壓。 假設它保存在~/Downloads/jtds-1.2.8-dist/jtds-1.2.8.jar 注意:其他版本可能無法使用!
  2. R設置驅動程序: drv <- JDBC("net.sourceforge.jtds.jdbc.Driver", "~/Downloads/jtds-1.2.8-dist/jtds-1.2.8.jar")
  3. 設置連接對象: conn <- dbConnect(drv, "jdbc:jtds:sqlserver://servername:port;DatabaseName=databasename", domain="windows domain", user="user", password="pwd")

在這里,領域domain事情搞砸了。 你不能把domain\\username作為你的user 您必須根據jTDS 驅動程序實現分別定義它們。

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

同樣的錯誤發生在我之前嘗試使用 RJDBC 連接到 Cassandra 時,通過將 Cassandra JDBC 依賴項放在您的 JAVA ClassPath 中解決了這個錯誤。

看到這個答案

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM