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)
执行有结果返回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")
事务处理:¶
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)