2013-01-25 17 views
12

Sto provando a connettermi a un Microsoft SQL Server da R su Mac/Linux e ho problemi con RJDBC. Quando ho scaricato conducente e jTDS di Microsoft, ma nessuna delle seguenti linee di lavoro:Connessione a MS SQL Server da R su Mac/Linux

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

Ognuno restituisce il seguente messaggio di errore:

Error in .jfindClass(as.character(driverClass)[1]) : class not found 

Ho il sospetto che il problema potrebbe essere con il male Versione Java: il mio java predefinito è

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

ma ho anche Jave 1.6 installato sulla mia macchina. Ho installato SquirrelSQL e si connette a MS SQL Server senza problemi usando il driver JTDS; la versione Java utilizzata da SquirrelSQL è 1.7.0.11.

Ho eseguito R CMD javareconf con il seguente risultato:

$ 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. 

e rimossi/installati di nuovo pacchetti RJDBC e Rjava, e ancora niente funziona.

Credo di essere bloccato in questo momento, perché non ho molta familiarità con Java/RJDBC e la loro interazione. La ricerca di google ha trovato diverse persone con problemi simili senza soluzione.

Tutti i suggerimenti su come comportarsi correttamente con JDBC o qualsiasi altro modo per connettersi a MS SQL Server da R, saranno molto apprezzati!

UPDATE 1. Bene, la prima affermazione sembra funzionare ora: sto ottenendo una connessione e posso interrogare il database senza problemi. Non sono sicuro di cosa ha risolto il problema - potrebbe essere necessario riavviare la mia sessione mac/R. La seconda istruzione continua a non funzionare, con lo stesso messaggio di errore.

+0

Ho ricevuto questo errore quando ho cambiato da 'R 3' a' pqR'. Tutto quello che posso offrire per una soluzione è usare 'locate sqljdbc4.jar' per trovare qualsiasi cosa abbia bisogno di essere caricata. – isomorphismes

risposta

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

Grazie Baburao. Che cos'è in questo contesto? –

+0

Ho trovato l'unico posto sul mio disco rigido che ha 'log4j.jar' ecc:'/Users/victor/ARIS71/DownloadClient/170.194.12.195/jdbc/mdb/'(non so cosa sia ARIS71). Ho aggiunto le righe che hai suggerito, e ancora niente funziona. La libreria Microsoft ha smesso di funzionare, anche se ha funzionato solo ieri quando ho pubblicato il mio aggiornamento. Sono totalmente perplesso. –

4

Ho lottato per un po 'su questo. Ecco cosa ho trovato.

  1. Download da here - driver Microsoft JDBC per SQL Server
  2. Decomprimere il file, dove si trova sqljdbc4.jar.
  3. Usa:

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

Questo dovrebbe funzionare.

se ho ragione, l'idea è che per la variabile PATH in drv funzione, uno sarà necessario specificare il percorso in cui si trova il driver JDBC (quindi se nessuno, quindi scaricato PRIMA). In caso contrario, si riceverà l'errore comune class not find.

1

Ho riscontrato questo problema con jtds-1.3.1 su Linux. Il problema è scomparso quando ho provato a passare a jtds-1.2.7. Sembra che ci sia qualcosa in jtds-1.3. * Che lo rende incompatibile con RJDBC.

4

Il seguente codice raggiunge l'obiettivo di connettersi a R da Mac OS x. Scaricare il driver JDBC Microsoft da Microsoft here

Link to Gist/Code in 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) 
0

stesso errore che mi è successo prima, quando stavo cercando di usare RJDBC per connettersi a Cassandra, è stato risolto mettendo le dipendenze Cassandra JDBC nella vostra JAVA ClassPath.

Vedi questo answer:

1

ho avuto lo stesso identico problema. Questa è una soluzione jTDS:

  1. Scarica jTDS 1.2.8 e decomprimerlo. Diciamo che è stato salvato a ~/Downloads/jtds-1.2.8-dist/jtds-1.2.8.jar. Nota: altre versioni potrebbero non funzionare!
  2. Da R, impostare il driver: drv <- JDBC("net.sourceforge.jtds.jdbc.Driver", "~/Downloads/jtds-1.2.8-dist/jtds-1.2.8.jar").
  3. Imposta oggetto connessione: conn <- dbConnect(drv, "jdbc:jtds:sqlserver://servername:port;DatabaseName=databasename", domain="windows domain", user="user", password="pwd").

Qui il campo domain faceva casino. Non è possibile inserire domain\username come user. È necessario definirli separatamente in base allo jTDS driver implementation.

Problemi correlati