博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用Ruby DBI模块
阅读量:5304 次
发布时间:2019-06-14

本文共 4478 字,大约阅读时间需要 14 分钟。

原本的DBI模块的安装教程:

1.
安装
首先,我是使用mysql进行测试的,你的机器上需要安装mysql数据库。
然后执行:
gem install mysql
到rubyforge下载ruby-DBI,解压后cd到目录运行如下命令:
ruby setup.rb config --with=dbi,dbd_mysql
ruby setup.rb setup
ruby setup.rb install
完整的setup命令参数参考DBI的doc

2.完整例子
DBI是一类似于ODBC的开发式的统一的数据库编程接口,结构层次上可以分为两层:
1.Database Interface——数据库接口层,与数据库无关,提供与数据库无关的标准接口
2.Database Driver——数据库驱动,与数据库相关
DBI也是很简单易用的,一个完整的使用例子,对于初学者可能有点帮助:
require 'dbi'begin  #连接数据库  dbh=DBI.connect("DBI:Mysql:dbi_test:localhost","root","")    dbh.columns("simple").each do |h|    p h  end  #示范3种事务处理方式  #手动commit  dbh["AutoCommit"]=false  1.upto(10) do |i|    sql = "insert into simple (name, author) VALUES (?, ?)"    dbh.do(sql, "Song #{i}", "#{i}")  end  dbh.commit    #使用transaction方法  dbh.transaction do |dbh|    1.upto(10) do |i|      sql = "insert into simple (name, author) VALUES (?, ?)"      dbh.do(sql, "Song #{i}", "#{i}")    end  end    #使用SQL语句  dbh.do("SET AUTOCOMMIT=0")  dbh.do("BEGIN")  dbh["AutoCommit"]=false  dbh.do("UPDATE simple set name='test' where id='1'")  dbh.do("COMMIT")    #查询  sth=dbh.execute("select count(id) from simple")  puts "bookCount:#{sth.fetch[0]}"  sth.finish  begin    sth=dbh.prepare("select * from simple")    sth.execute    while row=sth.fetch do      p row    end    sth.finish  rescue  end    #上面这段查询可以改写为:  #dbh.select_all("select * from simple") do |row|  #   p row  #end         #使用工具类输出xml格式结果集以及测量查询时间  sql="select * from simple"  mesuretime=DBI::Utils::measure do    sth=dbh.execute(sql)  end   puts "SQL:#{sql}"  puts "Time:#{mesuretime}"  rows=sth.fetch_all  col_names=sth.column_names  sth.finish  puts DBI::Utils::XMLFormatter.table(rows)    dbh.do("delete from simple")rescue  DBI::DatabaseError=>e  puts "error code:#{e.err}"  puts "Error message:#{e.errstr}"ensure  dbh.disconnect if dbhend
出现问题:
但是每次我执行第一步的时候就会出现 config: unknown option --with=dbi,dbd_mysql Try 'ruby setup.rb --help' for detailed usage.
原因分析:
这是由于dbi版本问题造成的。
因此新版本的安装方式如下:

一般方法是:下载dbitar.gzzip格式),CMD下切换到解压的目录,使用以下命令:

ruby setup.rb config (或ruby setup.rb config --with=dbi,dbd_mysql

ruby setup.rb setup

ruby setup.rb install

报错

irb(main):001:0> require 'dbi': no such file to load -- deprecated        from 
:29:in `require' from
:29:in `require' from C:/MyProgramFiles/Ruby192/lib/ruby/site_ruby/1.9.1/dbi.rb:48:in `
' from
:29:in `require' from
:29:in `require' from (irb):1 from C:/MyProgramFiles/Ruby192/bin/irb:12:in `
'irb(main):002:0>
这个问题比较简单,只要安装一个deprecated包,于是我下载了deprecated-3.0.0.gem,安装之后还是报错。
irb(main):001:0> require 'dbi'NoMethodError: undefined method `deprecate' for DBI::Date:        from C:/MyProgramFiles/Ruby192/lib/ruby/site_ruby/1.9.1/dbi/utils/date.rb:57:in `
' from C:/MyProgramFiles/Ruby192/lib/ruby/site_ruby/1.9.1/dbi/utils/date.rb:7:in `
' from C:/MyProgramFiles/Ruby192/lib/ruby/site_ruby/1.9.1/dbi/utils/date.rb:1:in `
' from
:29:in `require' from
:29:in `require' from C:/MyProgramFiles/Ruby192/lib/ruby/site_ruby/1.9.1/dbi/utils.rb:56:in `
' from
:29:in `require' from
:29:in `require' from C:/MyProgramFiles/Ruby192/lib/ruby/site_ruby/1.9.1/dbi.rb:50:in `
' from
:29:in `require' from
:29:in `require' from (irb):1 from C:/MyProgramFiles/Ruby192/bin/irb:12:in `
'irb(main):002:0>

再次Google,居然是deprecated-3.0.0.gem太新了!换成deprecated-2.0.1.gem就可以了。

irb(main):001:0> require 'dbi'  => true  irb(main):002:0>

这个问题还是比较容易解决的,不过要是出现如下问题就不好解决了:

:29:in `require': no such file to load -- parsedate () from
:29:in `require' from c:/Program Files (x86)/RailsInstaller/Ruby1.9.2/lib/ruby/site_ruby/1.9.1/dbi/sql.rb:9:in `
' from c:/Program Files (x86)/RailsInstaller/Ruby1.9.2/lib/ruby/site_ruby/1.9.1/dbi/sql.rb:7:in `
' from
:29:in `require' from
:29:in `require' from c:/Program Files (x86)/RailsInstaller/Ruby1.9.2/lib/ruby/site_ruby/1.9.1/dbi.rb:37:in `
' from
:29:in `require' from
:29:in `require' from E:/Program/Eclipse/RubyTest/dbi.rb:1:in `
'

经过查询之后,才发现原来parsedate在ruby1.9.2中已经被废除了,现在使用的是date。因此这个版本问题真的是没有办法进行解决啦。我现在正在考虑要不要把ruby降级来解决这个问题。尝试中,后面如果解决了会进行更新。

转载于:https://www.cnblogs.com/huzhiwei/archive/2012/02/27/2369789.html

你可能感兴趣的文章
十. 图形界面(GUI)设计9.列表和组合框
查看>>
10.17动手动脑
查看>>
js index of()用法
查看>>
WPF中Image显示本地图片
查看>>
Windows Phone 7你不知道的8件事
查看>>
脚本删除文件下的文件
查看>>
实用拜占庭容错算法PBFT
查看>>
java b组 小计算器,简单计算器..
查看>>
java的二叉树树一层层输出,Java构造二叉树、树形结构先序遍历、中序遍历、后序遍历...
查看>>
php libevent 定时器,PHP 使用pcntl和libevent实现Timer功能
查看>>
php仿阿里巴巴,php实现的仿阿里巴巴实现同类产品翻页
查看>>
Node 中异常收集与监控
查看>>
七丶Python字典
查看>>
Excel-基本操作
查看>>
面对问题,如何去分析?(分析套路)
查看>>
Excel-逻辑函数
查看>>
面对问题,如何去分析?(日报问题)
查看>>
数据分析-业务知识
查看>>
nodejs vs python
查看>>
poj-1410 Intersection
查看>>