Connecting R to an Oracle database with RJDBC

In many circumstances, you might want to connect R directly to a database to store and retrieve data.  If the source database is an Oracle database, you have a number of options:

  Using ROracle should theoretically provide you with the best performing client, as this library is a wrapper around the Oracle OCI driver.  The OCI driver, however, is platform-specific and requires you to install Oracle database client software.

   Using RODBC for Oracle is like using an ODBC connection for any database; so long as your platform provides an ODBC manager and drivers, you are OK.  On Linux, this means unixODBC, and on Windows, this means the Oracle Data Access Components package.

What if you don’t want to write code that is either platform-specific or requires relatively complex, platform-specific installation steps?  In this case, you should consider using RJDBC.

  I’ll assume that you have a JRE/JDK installed and know the path to your JAVA_HOME.

  The first step is to obtain the Oracle JDBC drivers, e.g., the 11gR2 release drivers.  You can pick the lowest compatible Java version you’d like to support; I’m using ojdbc6.jar, which should support Java 6+.
  Next, make sure you know how to connect to your source database.  You’ll need the following information for your database listener:
  • Hostname or IP, e.g.,
  • Port, e.g., 1521
  • Service name or SID, e.g., ORCL
  • Username
  • Password

This information will allow us to construct the DSN, which will look something like this:  jdbc:oracle:thin:@//hostname:port/service_name_or_sid

Armed with this DSN and your Java home, you should now be able to modify and execute the example below.


  1. Harmeek

    Hi Michael,

    I followed this process step by step but I am getting this error –
    Error in .jinit() : Cannot create Java virtual machine (-1)

    Any resolution for this?


  2. isomorphismes

    This information will allow us to construct the DSN, which will look something like this: jdbc:oracle:thin:@//hostname:port/service_name_or_sid

    Is @ short for something? Or is it literally the symbol @?

    1. Nick

      It’s literally the symbol @

  3. Patrick

    Thank you. I followed your instruction and it worked well (only took 5 minutes to read and use successfully)!!

  4. Rohit

    Thanks a lot. It worked. 🙂

  5. Kory

    For those stuck on Windows and/or have yet to install the packages:


  6. Joel U

    Brilliant! I just wanted to say a BIG ‘Thank you” for solving my connection to Oracle problems. I had previously installed the free version of the DBvisualizer tool which came with a number of drivers (available from ).

    I had to make a couple of minor changes to spell out the full path to the relevant files:
    FROM Sys.setenv(JAVA_HOME=’/path/to/java_home’)
    TO Sys.setenv(JAVA_HOME=’C:/ProgramData/Oracle/Java/javapath’)

    FROM classPath=”lib/ojdbc6.jar”
    TO classPath=”c:/Program Files/DbVisualizer/jdbc/oracle/ojdbc6.jar”

    Then it worked perfectly. Cheers, mate!

  7. ale

    This worked for me
    print(.jcall(“java/lang/System”, “S”, “getProperty”, “java.version”))
    jdbcDriver <- JDBC(driverClass="oracle.jdbc.OracleDriver", classPath="C:/Program Files/Java/ojdbc6.jar")
    jdbcConnection <- dbConnect(jdbcDriver, "jdbc:oracle:thin:@//", "username", "password")
    instanceName <- dbGetQuery(jdbcConnection, "SELECT instance_name FROM v$instance")

Leave a Comment

Your email address will not be published. Required fields are marked *