Подтвердить что ты не робот

Подключение к 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. Второй оператор все еще не работает, с тем же сообщением об ошибке.

4b9b3361

Ответ 1

Я некоторое время боролся с этим. Вот что я нашел.

  • Загрузите из здесь - Драйвер Microsoft JDBC для SQL-сервера
  • Разархивируйте файл, где вы найдете sqljdbc4.jar.
  • Применение:

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

Это должно работать.

Если я прав, идея такова, что для переменной 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.

Смотрите ответ: