2013-01-25 41 views
12

我試圖從R/Mac/Linux連接到Microsoft SQL Server,並且我有問題與RJDBC。當我下載了Microsoft的驅動程序和JTDS,但沒有以下行的工作:在Mac/Linux上從R連接到MS SQL Server

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) 

但我也有我的機器上安裝了Jave 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將高度讚賞!

UPDATE 1。那麼,第一個陳述似乎現在工作 - 我得到一個連接,並可以查詢數據庫沒有任何問題。不知道什麼解決了問題 - 可能是我需要重新啓動我的Mac/R會話。第二條語句仍然不起作用,並帶有相同的錯誤消息。

+0

當我從'R 3'改爲'pqR'時,出現了這個錯誤。我所能提供的解決方案是使用'locate sqljdbc4.jar'來查找需要加載的任何需求。 – isomorphismes

回答

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

謝謝Baburao。 在這方面是什麼? –

+0

我發現我的硬盤上有'log4j.jar'等的唯一地方:'/ Users/victor/ARIS71/DownloadClient/170.194.12.195/jdbc/mdb /'(不知道ARIS71是什麼)。我添加了你建議的行,但仍然沒有任何作用。微軟的圖書館也停止了工作,儘管昨天我發佈了更新後才工作。我完全不解。 –

4

我一直在爲此苦苦掙扎。這是我發現的。

  1. 下載從here - 微軟的JDBC驅動程序的SQL Server
  2. 解壓文件,在那裏你會找到sqljdbc4.jar
  3. 用途:

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

這應該工作。

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

1

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

4

以下代碼實現了您從Mac OS x連接到R的目標。 從微軟here

Link to Gist/Code in Github下載微軟的JDBC驅動程序

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

發生在我同樣的錯誤年初的時候,我試圖用RJDBC連接到Cassandra的,它是通過將卡桑德拉JDBC依賴於解決您的JAVA ClassPath。

看到這個answer

1

我有完全相同的問題。這是一個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 driver implementation單獨定義它們。