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)