ruby mysql pool_Ruby操作MYSQL数据库

今天闲来无事,就想起来继续学习学习ruby。看看ruby的sql操作。ms在ruby当中利用mysql的比较的多。好吧,我们就开始来用mysql吧。

想想java当中操纵数据库首先得需要一个数据库驱动,当然ruby也不例外,自然也需要一个数据库驱动。ruby当中安装数据库驱动我感觉相比较java稍微复杂一点。

首先,你需要在你的mysql数据库的bin目录下将文件libmySQL.dll拷贝到ruby安装目录下的bin文件下。

其次,你需要到http://rubyforge.org/projects/mysql-win当中去下载一个驱动包mysql-2.7.3-mswin32.gem

接着,我们在命令行下,切换到驱动包的安装目录。运行 gem install mysql-2.7.3-mswin32.gem。OK驱动安装完毕

最后,我们需要在ruby安装目录的\lib\ruby\gems\1.8\gems\mysql-2.7.3-x86-mswin32\ext下将mysql.so文件拷贝到ruby安装目录下的\lib\ruby\site_ruby\1.8\i386-msvcrt文件当中。

好了,万事具备,只欠东风了。我们要开始写代码了。

require 'DBcon'

begin

dbh = Mysql.real_connect("localhost", "root", "sa","makedish", 3306) #连接数据库本机:用户名:root 密码:sa 数据库:makedish 端口:3306

dbh.query("drop table if exists test_foolfish") #ruby执行语句

dbh.query("create table test_foolfish(id int,name varchar(20))")

dbh.query("insert into test_foolfish values(1,'你好')")

dbh.query("insert into test_foolfish values(2,hello)")

printf "%d rows were inserted\n",dbh.affected_rows #affected_rows返回受影响的行数

res=dbh.query("SELECT name FROM test_foolfish")

puts "===============\n"

res.each_hash(with_table = true) do |row|

printf "%d,%s\n",row["test_rb.id"],row["test_rb.name"]

end

puts "===============\n"

puts "Server version:"+dbh.get_server_info

rescue Mysql::Error=>e

puts "Error code:#{e.errno}"

puts "Error message:#{e.error}"

puts "Error SQLSTATE:#{e.sqlstate}" if e.respond_to?("sqlstate")

ensure

dbh.close if dbh

end

研究以上代码,首先我们需要和数据库建立连接:

dbh = Mysql.real_connect("localhost", "root", "sa","makedish", 3306)

这里调用Mysql模块的real_connect方法。参数就不用多说了。建立连接后我们就需要对数据库进行相应的操作。

ruby当中对数据库存在两种操作:一种是不用返回结果集的(例如insert,update,delete等等) 一种是需要返回结果集的(如select show等)。对于不返回结果集的操作,我们只需要使用dbh.query方法,传入需要执行的sql语句执行即可

对于另一种需要返回结果集的则相对麻烦一些。执行完上面类似的语句之后,我们需要对结果集进行处理。我们可以将结果集一数组或者hash形式展现。这里我们使用hash方式展现。

res=dbh.query("SELECT name FROM test_foolfish")

puts "===============\n"

res.each_hash(with_table = true) do |row|

printf "%d,%s\n",row["test_rb.id"],row["test_rb.name"]

end

each_hash方法当中添加with_table = true参数可以保证在执行多表查询的时候,多张表具有相同字段的尴尬。这样我们hash的key值就可以用“表名.列名”的形式出现。

怎么样,很简单吧。试一试吧。今天也只看了一点点。等研究多了,再发布点新东西

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2009-08-20 15:37

浏览 6666

评论

5 楼

lliiqiang

2014-09-03

面向对象变量相对于现实中物质名称标识,类是集合概念.

4 楼

dimaomao

2010-03-24

哦,对了

request "DBcon"

改成

request "mysql"

3 楼

dimaomao

2010-03-24

Mysql2.8.1的驱动配置的方式稍微有些变动,最后那一步应该改成把比如E:\ruby\lib\ruby\gems\1.8\gems\mysql-2.8.1-x86-mingw32\lib\1.8

下的mysql.so(或者mysql_api.so)放到比如E:\ruby\lib\ruby\site_ruby\1.8\i386-msvcrt下。

还有仁兄给出的测试代码,也好像应该改一下,如下:

res=dbh.query("SELECT id, name FROM test_foolfish")

puts "===============\n"

res.each_hash(with_table = true) do |row|

printf "%d,%s\n",row["test_foolfish.id"].to_i(),row["test_foolfish.name"].to_s()

end

我是初学者,纯粹为了以后学习的朋友学习之用。

2 楼

dimaomao

2010-03-24

(⊙o⊙)…不知道Mysql2.8.1的驱动下,上面的例子是否还能够顺利的执行?我试了一下,没有成功,抛出了如下异常:

:in `gem_original_require': no such file to load -- DBcon (LoadError)

1 楼

dimaomao

2010-03-24

刚好用到这些内容,真的很感谢!辛苦了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值