得到连接时还要制定账号密码:coon <- dbConnect(drv,"jdbc:mysql://localhost/mybase","root","123456")
RMysql包是一个不错的工具。 简单示例1:
install.packages("RMySQL") library(RMySQL) conn <- dbConnect(MySQL(), dbname = "test1", username="root", password="123456", host="127.0.0.1", port=3306) #创建数据库表并写入数据 dbWriteTable(conn, "mtcars", mtcars[1:10, ],append=T) #往数据库库表中添加数据 dbWriteTable(conn, "mtcars", mtcars[11:20, ],append=T) #往数据库库表中覆盖数据,表中元数据将清空 dbWriteTable(conn, "mtcars", mtcars[21:30, ],overwrite=T) #查询表中数据 dbReadTable(conn, "mtcars") #查询某张表是否存在 dbExistsTable(conn,"mtcars") #列出数据库中所有表 dbListTables(conn) #使用sql查询语句 dbGetQuery(conn,"select mpg from mtcars where mpg>15") #列出某张表中的所有字段名称 dbListFields(conn,"mtcars") dbListResults(conn,"select * from mtcars") #删除数据库表 dbRemoveTable(conn,"mtcars") #列出连接数据库相关信息 dbGetInfo(conn) #关闭连接 dbDisconnect(conn)
RMysql存储和查询中文字符时的问题及解决方法
环境:win7
mysql数据库字符集:utf8
RStudio编辑器环境:utf8Q1:当存储含有中文的frame时,报错
> dbWriteTable(conn,"fruits",fruits,overwrite=T) Error in .local(conn, statement, ...) : could not run statement: Invalid utf8 character string: '苹'
尝试了很多解决方法,都不好用。以下介绍一种好用的解决方法:把数据库的字符集改为gbk
create database rtest DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;
这样再连接这个数据库时,就可以正常存储含有中文字符的数据了。
Q2:查询数据库数据时,中文显示乱码
> sb<-dbGetQuery(conn,"select * from new_table") > head(sb) row_names code name industry area 1 600000 600000 娴﹀彂閾惰 閾惰 SH 2 600004 600004 鐧戒簯鏈哄満 鏈哄満鑸繍 SH 3 600006 600006 涓滈姹借溅 姹借溅鏁磋溅 SH
解决方法:
> dbSendQuery(conn,"SET NAMES gbk") <MySQLResult:-1912957498,2,6> > sb<-dbGetQuery(conn,"select * from new_table") > head(sb) row_names code name industry area 1 600000 600000 浦发银行 银行 SH 2 600004 600004 白云机场 机场航运 SH 3 600006 600006 东风汽车 汽车整车 SH
通过以上方法,就可以很好的处理中文内容了。也可以看出RStudio对utf8的支持并不好。
R与Mysql数据库连接的两种方法
方法一:RODBC包
R中的RODBC
包在Linux和Windows系统下都能运行。所以,使用这个包可以把R连接到所有的数据库系统。下面以连接Mysql为例(在Windows系统下)。
使用RODBC
连接数据库需要下载相应的数据库ODBC接口。具体安装和配置流程如下:
在http://dev.mysql.com/downloads/connector/odbc
下载mySQL ODBC,安装好。
windows:控制面板->管理工具->数据源(ODBC)->双击->添加->选中mysql ODBC driver一项填写:data source name 一项填入你要使用的名字,自己随便命名例如:mysql_data
description一项随意填写,例如mydata。TCP/IP Server 填写服务器IP,本地数据库一般为:127.0.0.1。 user 填写你的mysql用户名,password 填写你的mysql密码。然后数据库里会出现你的mysql里的所有数据库,选择一个数据库。确定。
下面进行示例操作:
install.packages("RODBC")
library(RODBC)
#我的mysql用户名是root,密码是123456
channel <- odbcConnect("mysql_data", uid = "root", pwd = "123456")
sqlTables(channel) #查看你在上面所选数据库中的所有表
data <- sqlFetch(channel, "users") #将使用的数据库中的表users连接到R,这样就实现了在R中操作数据库中的数据
sqlSave(channel, mtcars) #将R中的数据存储到Mysql
sq <- sqlQuery(channel, "select mpg from mtcars") #在R中通过sql语句提取数据
关于中文乱码问题:
第一张图片是在mysql中乱码,第二张图片是将R中包含中文的数据写入到mysql时乱码。首先查看当前数据库字符编码集:show variables like '%character%'
:
解决办法:在mysql安装目录下有个my.ini
文件,将default-character-set=utf8 改为 default-character-set=gbk ,重新启动 MySQL 服务即可。当然,R或Rstudio也要重新启动
方法二:RMySQL包
install.packages("RMySQL")
library(RMySQL)
channel <- dbConnect(MySQL(),
user="root", #用户名
password="123456", #密码
dbname="test", #数据库名称
host="localhost") #主机地址
dbListTables(channel) #查看数据库中的所有表
headmt <- head(mtcars)
dbWriteTable(channel, "headmt", headmt) #将R中的数据写入mysql
headmt <- dbReadTable(channel, "headmt") #将数据库中数据读入到R
dbGetQuery(channel, "select * from headmt where cyl = 6") #查询数据
在数据集包含中文的情况下,跟RODBC
包不同的是,即使你已经修改my.ini
文件default-character-set=gbk。用RMySQL包中的dbWriteTable
函数将R中的数据写入mysql以及用dbReadTable
函数将数据库中数据读入到R时均失败。此时只需在R中通过命令dbSendQuery(channel, "SET NAMES gbk")
设置GBK字符集即可
1、使用R数据库接口
连接MySQL,使用RMySQL包,使用前RMySQL包要先安装。
library(RMySQL)
连接方式有2种:
(1)使用dbConnect
conn <- dbConnect(MySQL(), dbname = "rmysql", username="rmysql", password="rmysql", host="127.0.0.1", port=3306)数据操作方法:
dbWriteTable(conn, "tablename", data) #写表
dbReadTable(conn, "tablename") #读表
dbDisconnect(conn) #关闭连接(2)使用sqldf包
首先要安装sqldf包,其次调用:
>library(sqldf)
> sqldf("select * from t_data",dbname="test",drv="MySQL",user="root",password="",host="127.0.0.1",port=3306)
连接后,SQL查询语句后面的参数均可省略,例如:
> sqldf("select * from t_data limit 0,10")
2、使用ODBC连接
在Windows下配置ODBC(开放数据库连接),具体步骤如下:
(1)R下载RODBC包,安装好。
(2)在http://dev.mysql.com/downloads/connector/odbc下载mySQL ODBC,安装好。
(3)Windows:控制面板->管理工具->数据源(ODBC)->双击->添加->选中mysqlODBC driver一项
填写:data source name 一项填入你要使用的名字,自己随便命名,例如:mysql_data;
description一项随意填写,例如mydata
TCP/IP Server 填写本机服务器IP,一般为:127.0.0.1
user 填写你的mysql用户名
password 填写你的mysql密码
然后数据库里会出现你的mysql里的所有数据库,选择一个数据库。
确定。
(4)打开R的界面调用数据库:library(RODBC);
channel <- odbcConnect("mysql_data", uid="root", pwd="123");
sqlTables(channel);#查看数据中的表
data<-sqlFetch(channel,"kegg")# 查看表的内容,存到数据框里