R-Odbc

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

包RODBCCRAN里面的包RODBC提供了支持ODBC规范的访问数据源的接口。它有广泛的需求,可以使一样的R代码访问不同的数据库系统。在Unix/Linux以及Windows系统都能运行包RODBC,而且几乎所有的数据库系统都支持ODBC。我们已经在Windows平台上的MicrosoftSQLServer,Access,MySQL和PostgreSQL以及Linux平台上的MySQL,Oracle,PostgreSQL和SQLite都测试过了。ODBC是一种客户端-服务器系统。我们可以从Windows客户端连接Unix服务器上运行的DBMS,反之也然。Windows通常都会支持ODBC,最新版本作为MDAC的一部分可以从下载。在Unix/Linux系统,你需要一个ODBC驱动管理,比如unixODBC()或iOBDC(),还需要为你的数据库系统安装一个驱动。FreeODBC项目()是和ODBC信息相关的一个知识库。Windows不仅为DBMSs提供驱动,还为Excel电子表格(.xls),DBase(.dbf)文件甚至文本文件提供驱动。(不需要安装命名过的软件。)现在已经有Excel2007和Access2007版本的驱动了(去,选择`Office'并且找到`ODBC',然后下载AccessDatabaseEngine.exe)。大量同时访问是可能的。调用odbcConnect或odbcDriverConnect(在Windows图形化界面下,可以通过对话框选择数据库)可以打开一个连接,返回一个用于随后数据库访问的控制(handle)。打印一个连接会给出ODBC连接的一些细节,而调用odbcGetInfo会给出客户端和服务器的一些细节信息。连接可以通过调用函数close或odbcClose来关闭。没有R对象对应或不在R会话后面的连接也可以调用这两个函数来关闭,但会有警告信息。在一个连接中的表的细节信息可以通过函数sqlTables获得。函数sqlSave会把R数据框复制到一个数据库的表中,而函数sqlFetch会把一个数据库中的表拷贝到一个R的数据框中。一个SQL查询可以通过调用sqlQuery传给数据库。返回的结果是R的数据框。(sqlCopy把一个查询传给数据库,返回结果在数据库中以表的方式保存。)一种比较好的控制方式是首先调用odbcQuery,然后用sqlGetResults取得结果。后者可用于一个循环中每次获得有限行,就如函数sqlFetchMore的功能。这里是用PostgreSQL的一个例子,其中ODBC驱动把列和数据框的名字映射成小写。我们用一个事先创建的数据库testdb,还有一个个设置在unixODBC下文件~/.odbc.ini的数据源名字(DataSourceName,DSN)。同样的代码在MyODBC访问Linux或Windows上的MySQL数据库时一样有效(其中,MySQL依然会把名字映射成小写)。在Windows,DSN在控制面板的ODBC工具里面设置(在Windows2000/XP,设置`管理工具'部分的`数据源(ODBC)')。library(RODBC)##让函数把名字映射成小写channel-odbcConnect(testdb,uid=ripley,case=tolower)##把一个数据框导入数据库data(USArrests)sqlSave(channel,USArrests,rownames=state,addPK=TRUE)rm(USArrests)##列出数据库的表sqlTables(channel)TABLE_QUALIFIERTABLE_OWNERTABLE_NAMETABLE_TYPEREMARKS1usarrestsTABLE##列出表格sqlFetch(channel,USArrests,rownames=state)murderassaulturbanpoprapeAlabama13.22365821.2Alaska10.02634844.5...##SQL查询,原先是在一行的sqlQuery(channel,selectstate,murderfromUSArrestswhererape30orderbymurder)statemurder1Colorado7.92Arizona8.13California9.04Alaska10.05NewMexico11.46Michigan12.17Nevada12.28Florida15.4##删除表sqlDrop(channel,USArrests)##关闭连接odbcClose(channel)作为Windows下面用ODBC连接Excel电子表格的一个简单例子,我们可以如下读取电子表格library(RODBC)channel-odbcConnectExcel(bdr.xls)##列出电子表格sqlTables(channel)TABLE_CATTABLE_SCHEMTABLE_NAMETABLE_TYPEREMARKS1C:\\bdrNASheet1$SYSTEMTABLENA2C:\\bdrNASheet2$SYSTEMTABLENA3C:\\bdrNASheet3$SYSTEMTABLENA4C:\\bdrNASheet1$Print_AreaTABLENA##获得表单1的内容,可以用下面任何一种方式sh1-sqlFetch(channel,Sheet1)sh1-sqlQuery(channel,select*from[Sheet1$])注意,数据库表的规范和sqlTables返回的名字是不一样的:sqlFetch可以映射这种差异。

1 / 3
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功