RJDBC简介

RJDBC组件是一个开源组件,支持R语言在Windows或者Linux环境中通过R语言访问任何支持JDBC驱动的数据库。因此RJDBC可以调用神通数据库提供的JDBC驱动来访问神通数据库。

由于RJDBC需要以来rjava和DBI组件,因此需要下载相关组件。

DBI下载来源

下载地址:https://cran.r-project.org/web/packages/DBI/index.html,这个地中中可以下载到源码、windows二进制和Arm64和X86-64下的二进制库。

rjava下载来源

下载地址:https://cran.r-project.org/web/packages/rJava/index.html ,这个地中中可以下载到源码、windows二进制和Arm64和X86-64下的二进制库。

RJDBC下载源

下载地址:https://cran.r-project.org/web/packages/RJDBC/ ,这个地中中可以下载到源码、windows二进制和Arm64和X86-64下的二进制库。

RJDBC安装

在线安装

如果R所在环境是可以接入互联网的环境,且已经安装了R时,进入R命令后,直接执行:install.packages("RJDBC"),安装成功后在R所在目录的$R/library下会有RJDBC目录。

离线安装

下载DBI、rjava、RJDBC 对应平台的二进制包,解压到$R/library目录下即可。以windows为例:

R的安装路径为:D:/Program Files/R/R-4.1.2 ,则将windows下的RJDBC二进制解压到D:/Program Files/R/R-4.1.2/RJDBC

安装验证

进入R命令后,执行library(RJDBC)操作,如果不报错,则代表R语言能正确调用RJDBC组件。备注RJDBC依赖本地的JAVA_HOME环境变量,需要设置才行。

RJDBC操作数据库

导入RJDBC库

执行命令:library(RJDBC) 必须先导入RJDBC库才能执行其他数据库操作。

Jdbc驱动注册

需要将神通数据库的jdbc注册到RJDBC中,方法如下:

drv<-JDBC("com.oscar.Driver","oscarJDBC16.jar", identifier.quote="\"")

备注:R有自己的工作目录,需要将神通数据库的JDBC驱动放置在R的工作目录中,查看R的工作目录方式为进入R命令后执行:getwd(),将oscarJDBC16.jar驱动放置到getwd()获得的目录中即可 使用者也可用用setwd设置R的工作目录。

登录和关闭数据库

提供了dbConnect方法来访问数据库,使用方式如下:

con<-dbConnect(drv,"jdbc:oscar://localhost:2003/osrdb","SYSDBA","szoscar55")

con即为这个连接的对象名。

关闭连接的方式为:dbDisconnect(con)

元数据获取

获得驱动信息:dbGetInfo(drv)

获得数据库中的所有表:dbListTables(con)

执行有结果返回SQL

dbSendQuery或者dbGetQuery方法支持执行sql语句,可以执行任何DQL语句。比如执行:

dbSendQuery(con, paste("select 1 col1 from dual"))

执行更改SQL

dbSendUpdate方法支持执行sql语句,可以执行任何DDL、DCL语句。比如执行一个建表语句:

dbSendUpdate(con, paste("create table rjdbc( a int ,b text)"))

查询单表

dbReadTable方法获得某一个表中的所有数据的方式为:

dbReadTable(con, "table name"),表名前面可以添加模式名,比如:sqlFetch(con, "SYSDBA.TEST")

判断表是否存在

dbExistsTable方法可用判断表是否存在,比如:

dbExistsTable(conn,"TEST")

成功返回true,失败返回false。

事务处理:

dbCommit用于事务的提交;dbRollback用于事务的回滚。

操作示例

示例中引入RJDBC后,登录神通数据库,创建rjdbc表,插入三条数据,并进行检索查询:

library(RJDBC)

drv<-JDBC("com.oscar.Driver","oscarJDBC16.jar", identifier.quote="\"")

con<-dbConnect(drv,"jdbc:oscar://localhost:2003/osrdb","SYSDBA","szoscar55")

dbSendUpdate(con, paste("create table rjdbc( a int ,b text)"))

dbSendUpdate(con, paste("insert into rjdbc values( 1 , 'a')"))

dbSendUpdate(con, paste("insert into rjdbc values( 2 , 'b')"))

dbSendUpdate(con, paste("insert into rjdbc values( 3 , 'c')"))

dbGetQuery(con,"select * from rjdbc")

dbSendUpdate(con, paste("drop table rjdbc"))

dbDisconnect(con)