- 论坛徽章:
- 0
|
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') |
|