Подключение к MS SQL Server с R на Mac/Linux
Я пытаюсь подключиться к Microsoft SQL Server с R на Mac/Linux, и у меня проблемы с 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)
но у меня также есть Jave 1.6, установленный на моей машине. У меня установлен SquirrelSQL и он подключается к MS SQL Server без каких-либо проблем с использованием драйвера JTDS; версия Java, над которой работает SquirrelSQL, составляет 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 и их взаимодействием. Поиск Google обнаружил нескольких людей с аналогичными проблемами без решения.
Любые советы о том, как вести JDBC или какой-либо другой способ подключения к MS SQL Server из R, будут высоко оценены!
ОБНОВЛЕНИЕ 1. Ну, первое выражение, похоже, работает сейчас - я получаю соединение и без проблем могу запросить базу данных. Не уверен, что исправила проблему - может быть, мне нужно перезапустить сеанс mac/R. Второй оператор все еще не работает, с тем же сообщением об ошибке.
Ответы
Ответ 1
Я некоторое время боролся с этим. Вот что я нашел.
Это должно работать.
Если я прав, идея такова, что для переменной PATH
в функции drv
необходимо указать PATH, где находится драйвер JDBC (так что если нет, а затем загрузите его FIRST). В противном случае каждый получит общую ошибку class not find
.
Ответ 2
Следующий код достигает вашей цели подключения к R из Mac OS x.
Загрузите драйвер Microsoft JDBC из Microsoft здесь
Ссылка на Gist/Code в 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)
Ответ 3
У меня была эта проблема с jtds-1.3.1 в Linux. Проблема исчезла, когда я попытался перейти на jtds-1.2.7. Похоже, что есть что-то в jtds-1.3. *, Что делает его несовместимым с RJDBC.
Ответ 4
У меня была такая же проблема. Это решение jTDS
:
- Загрузите jTDS 1.2.8 и разархивируйте его. Скажем, он сохраняется при
~/Downloads/jtds-1.2.8-dist/jtds-1.2.8.jar
. Примечание. Другие версии могут не работать!
- Из
R
установите драйвер: drv <- JDBC("net.sourceforge.jtds.jdbc.Driver", "~/Downloads/jtds-1.2.8-dist/jtds-1.2.8.jar")
.
- Установить объект подключения:
conn <- dbConnect(drv, "jdbc:jtds:sqlserver://servername:port;DatabaseName=databasename", domain="windows domain", user="user", password="pwd")
.
Здесь поле domain
было беспорядочным. Вы не можете поместить domain\username
в качестве user
. Вы должны определить их отдельно в соответствии с jTDS-драйвером.
Ответ 5
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")
Ответ 6
Такая же ошибка произошла со мной ранее, когда я пытался использовать RJDBC для подключения к Cassandra, она была решена путем размещения зависимостей Cassandra JDBC в вашем JAVA ClassPath.
Смотрите ответ: