博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

用R连接MySQL查询及问题解决

Posted on 2018-04-02 19:34  风吹白杨的安妮  阅读(1227)  评论(0编辑  收藏  举报

这个博客园好奇怪,怎么点开主页先出现的不是博客文章,而是随笔呢?

以前没碰过R,最近开始学习上R语言,一起加油吧^_^

---------------------------------

一、我们先连接上自己的MySQL数据库,代码如下

install.packages('RMySQL')
library(RMySQL)
con<-dbConnect(MySQL(),host='127.0.0.1',port=49293,dbname='anne',user='root',password= 'woshianne123.')

这里con的内容按照下面的资料填写,如果port为默认的3306的话,其实是可以不用写的,但如果port不是默认的话,就一定要写上,否则会出现连接错误

我在连接MySQL时,出现了很多错误,错误语句是:

Error in .local(drv, ...) : 
Failed to connect to database: Error: Access denied for user 'root'@'localhost' (using password: YES)

原因大概如下

①port非默认值,而是其他值,这时候需要在host后面写上port的值,不用单引号。

②密码错误,也会出现连接错误的情况。如果出现情况错误确定不是①的话,且对密码不清楚的话,可以在环境变量里配置MySQL,然后在CMD窗口里输入

mysql -hlocalhost -uroot -p+上你认为的密码,如:mysql -hlocalhost -uroot -pwoshianne123,应该会出现错误或正确的提示。

其他情况的话可以参考下网上的内容,我暂时没遇到。

 

二、读取MySQL的内容

#查看databbasbase
summary(con) #基本信息梗概
dbGetInfo(con) #数据库的基本信息
dbListTables(con) #查看数据库里的表格

 

#读取数据库
dbSendQuery(con,'SET NAMES gbk') #去除中文乱码影响,还是乱码的话用utf8
dbReadTable(con,'student')

 

#用SQL语句查询dbGetQuery()和dbSendQuery()两种方法 

dbGetQuery(con,'select * from score limit 3')  #会出现相应结果

res<-dbSendQuery(con,"SELECT * FROM score")

dbFetch(res, n=2) #取前2条数据,n=-1时是获取所有数据

data <- dbFetch(res, n=-1) #取余下所有数据
data
dbClearResult(res)
 #查询完一定要执行,否则可能会出现要你close resultset

 

# 用SQL语句批量查询 ,client.flag设置这样支持批量查询
con<-dbConnect(MySQL(),host='127.0.0.1',port=49293,dbname='anne',user='root',password= 'woshianne123.',client.flag= CLIENT_MULTI_STATEMENTS)
dbSendQuery(con,'SET NAMES gbk')
dbReadTable(con,'student')
dbReadTable(con,'score')
sql<-'select * from student;select * from score'
res1<-dbSendQuery(con,sql)
dbFetch(res1,n=2)
dbFetch(res1,n=-1)