RODBC简介

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

RODBC下载源

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

RODBC安装

在线安装

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

离线安装

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

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

安装验证

进入R命令后,执行library(RODBC)操作,如果不报错,则代表R语言能正确调用RODBC组件。

RODBC操作数据库

导入RODBC库

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

登录和关闭数据库

通过DSN数据源方式:

如果是windows下,需要在odbc数据源管理器中创建神通数据库的数据源;如果是在Linux下,需要再unixodbc中配置的odbc.ini文件中配置DSN数据源,如下语句为如果已经创建了神通数据库的odsn数据源,则R中执行即可连接数据库:

con<-odbcConnect("odsn",uid="sysdba",pwd="szoscar55")

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

关闭连接的方式为:odbcClose(con) 或者 close(con)

通过连接字符串方式

R提供了odbcDriverConnect方法来支持通过连接字符串的方式访问数据库,使用方式如下:

con<-odbcDriverConnect("DSN=odsn;UID=sysdba;PWD=szoscar55")

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

关闭连接的方式为:odbcClose(con) 或者 close(con)

元数据获取

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

获得指定类型的所有表:sqlTables(con, tableType= "TABLE")

获得指定模式下的所有表:sqlTables(con, schema = "SYSDBA")

获得一个表或视图的列信息:sqlColumns(con, "table name"),表名前面可以添加模式名,比如:sqlColumns(con, "SYSDBA.TEST")

获得数据库支持的数据类型:sqlTypeInfo(con)

执行SQL

sqlQuery方法支持执行sql语句,可以执行任何DDL、DML、DCL语句。比如执行一个查询:

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

查询单表

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

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

sqlFetch(con, "table name", max = m)

或者

sqlFetchMore(con, "table name", max = m)

m代表的就是行数。

删表操作

sqlDrop方法支持将表从数据库中删除:

sqlDrop(ch, "table name", errors = FALSE),表名前面可以添加模式表,比如:sqlDrop(ch, "SYSDBA.TEST", errors = FALSE)

操作示例

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

library(RODBC)

con<-odbcConnect("odsnw",uid="sysdba",pwd="szoscar55")

sqlQuery(con, paste("create table rodbc( a int ,b text)"))

sqlQuery(con, paste("insert into rodbc values( 1 , 'a')"))

sqlQuery(con, paste("insert into rodbc values( 2 , 'b')"))

sqlQuery(con, paste("insert into rodbc values( 3 , 'c')"))

sqlQuery(con,"select * from rodbc")

sqlQuery(con, paste("drop table rodbc"))

odbcClose(con)