免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4280 | 回复: 4

ruby扫盲之数据库篇 [复制链接]

论坛徽章:
0
发表于 2011-08-17 11:16 |显示全部楼层
Ruby使用统一数据库接口模块DBI来访问数据库,在DBI下面是各类数据库的驱动,如DBD::MySQL、DBD::SQLite。这个概念是跟Perl学的,Ruby DBI实际是ports了Perl的DBI模块。

(一)安装DBI和DBD::MySQL

我的是ubuntu 9.10自带的ruby 1.8.7和gems。由于apt-get安装的gems不能执行gems update自动升级,因此到rubygems.org上下载一个最新的gems,并安装它。

安装完后,运行如下命令安装MySQL相关驱动:

apt-get install ruby1.8-dev
gem install dbi
gem install dbd-mysql


说明:如果系统里没有安装Mysql,那么在上述步骤之前,先执行:

apt-get install mysql-client
apt-get install libmysqlclient-dev



(二)使用DBI

如果你熟悉Perl DBI的话,那么Ruby DBI使用简直一样。代码如下:

require 'rubygems'
require 'dbi'

# 创建dbh连接对象
dbh = DBI.connect('DBI:Mysql:test','root','')

# prepare一个SQL,创建sth对象
sth = dbh.prepare("insert into t1 (name,gender,city,mobile) values (?,?,?,?)")

# 执行SQL,插入一行数据
sth.execute('John Doe','M','Archer','4076320942')
sth.finish

# 执行SQL查询,并且逐行打印结果
sth = dbh.prepare("select * from t1")
sth.execute
while row = sth.fetch do
  p row
end
sth.finish

# 断开数据库
dbh.disconnect


但是,我个人更喜欢rubyish风格的代码,上述可重写如下:

require 'rubygems'
require 'dbi'

# connect方法同样创建dbh连接对象,但它接受一个block参数,并在方法里将dbh对象传给block
DBI.connect('DBI:Mysql:test','root','') do |dbh|

    # 一个插入SQL语句
    sql = "insert into t1 (name,gender,city,mobile) values (?,?,?,?)"

    # prepare这个SQL,prepare同样接受block参数,并将sth对象传入block
    dbh.prepare(sql) do |sth|
        # 执行SQL插入
        sth.execute('John Doe','M','Archer','4076320942')
    end

    # 执行SQL查询,并且逐行打印,同样用bock方式
    dbh.prepare("select * from t1") do |sth|
        sth.execute
        sth.fetch do |row|
           p row
        end
    end
end


第二种方式好处是局部变量如dbh、sth自动销毁,不用执行dbh.disconnect、sth.finish等语句。
另外它很华丽,一看就是Ruby。虽然很久没写,但我仍为卿狂。

如果SQL不是重复性执行的话,那么不必prepare,直接dbh.do也可以:
   
# Don't prepare, just do it!
    dbh.do('delete from t1 where id > 10')

论坛徽章:
0
发表于 2011-08-18 09:27 |显示全部楼层
学习~

论坛徽章:
0
发表于 2011-08-18 22:33 |显示全部楼层
不错不错。

论坛徽章:
0
发表于 2012-02-04 10:36 |显示全部楼层
UP下

论坛徽章:
0
发表于 2012-02-04 11:19 |显示全部楼层
仙子也灌水.....
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP