Пакет подключения к персональной базе данных в R - PullRequest
0 голосов
/ 12 марта 2019

Я создал пакет, чтобы упростить процесс установления соединения с базой данных, когда я начинаю новый проект в R. Почти каждый проект требует от меня соединения с частной базой данных, что означает просмотр файлов и вставку копий в какиеЯ сделал это раньше и скопировал драйверы sql в новую папку проекта.В идеале я хотел бы начать новый проект со следующим кодом:

library(MyConnections)

conn <- MyConnections::get_conn()

У меня есть функция пакета, которая работает для соединений с базой данных, которая не требует от меня чтения файла драйвера.

get_mysql_conn <- function(){
  require(RMySQL)
  dbConnect(MySQL(),
            user = 'user',
            password = "password",
            dbname = 'dbname',
            host= 'host')
}

Однако я не могу понять, как заставить этот код работать так, как я хочу.

get_mssql_conn <- function(){
  require(RJDBC)
  driver <- JDBC("com.microsoft.sqlserver.jdbc.SQLServerDriver", "./drivers/mssql-jdbc-7.0.0.jre8.jar")
  dbConnect(driver, "[connection string]",'[user]')
}

Я предполагаю, что должен быть способ создать объект драйвера в пакете и использовать его вфункция вместо чтения файла, но я совершенно заблудился относительно того, как мне поступить.Любая помощь или указание в правильном направлении будет высоко ценится.

1 Ответ

0 голосов
/ 12 марта 2019

Вы можете создать каталог inst/drivers и сохранить там файл .jar, а затем создать свою функцию, как показано ниже:

get_mssql_conn <- function(){
  driver <- RJDBC::JDBC(
    "com.microsoft.sqlserver.jdbc.SQLServerDriver", 
    system.file("drivers", "mssql-jdbc-7.0.0.jre8.jar", package = "MyConnections")
  )
  RJDBC::dbConnect(driver, "[connection string]",'[user]')
}

Примечание: вы должны никогда использовать require или library в пакете R - всегда используйте :: и перечислите пакет в Imports в файле DESCRIPTION.

...