Chinaunix首页 | 论坛 | 博客
  • 博客访问: 47948
  • 博文数量: 13
  • 博客积分: 555
  • 博客等级: 中士
  • 技术积分: 115
  • 用 户 组: 普通用户
  • 注册时间: 2005-03-20 14:56
文章分类

全部博文(13)

文章存档

2011年(13)

我的朋友

分类: Python/Ruby

2011-01-22 20:09:23

    今天闲来无事,就想起来继续学习学习ruby。看看ruby的sql操作。ms在ruby当中利用mysql的 比较的多。好吧,我们就开始来用mysql吧。
    想想java当中操纵数据库首先得需要一个数 据库驱动,当然ruby也不例外,自然也需要一个数据库驱动。ruby当中安装数据库驱动我感觉相比较java稍微复杂一点。

  • 首先,你需要在你的mysql数据库的bin目录下将文 件libmySQL.dll拷贝到ruby安装目录下的bin文件下。
  • 其次,你需要到当中去下载一个驱动包 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文件当中。

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

  1. require 'DBcon'
  2. begin
  3. dbh = Mysql.real_connect("localhost", "root", "sa","makedish", 3306) #连接数据库本机:用户名:root 密码:sa 数据库:makedish 端口:3306
  4. dbh.query("drop table if exists test_foolfish") #ruby执行语句
  5. dbh.query("create table test_foolfish(id int,name varchar(20))")
  6. dbh.query("insert into test_foolfish values(1,'你好')")
  7. dbh.query("insert into test_foolfish values(2,hello)")
  8. printf "%d rows were insertedn",dbh.affected_rows #affected_rows返回受影响的行数

  9. res=dbh.query("SELECT name FROM test_foolfish")
  10. puts "===============n"
  11. res.each_hash(with_table = true) do |row|
  12. printf "%d,%sn",row["test_rb.id"],row["test_rb.name"]
  13. end
  14. puts "===============n"
  15. puts "Server version:"+dbh.get_server_info
  16. rescue Mysql::Error=>e
  17. puts "Error code:#{e.errno}"
  18. puts "Error message:#{e.error}"
  19. puts "Error SQLSTATE:#{e.sqlstate}" if e.respond_to?("sqlstate")
  20. ensure
  21. dbh.close if dbh
  22. end

研究以上代码,首先我们需要和数据库建立连接:
  1. dbh = Mysql.real_connect("localhost", "root", "sa","makedish", 3306)
    这里调用Mysql模块的real_connect方法。参数就不用多说了。建立连接后我们就需要对数据库进行相应的操作。
    ruby当中对数据库存在两种操作:一种是不用返回结果集的(例如insert,update,delete等等)一种是需要返回结果集的(如 select show等)。对于不返回结果集的操作,我们只需要使用dbh.query方法,传入需要执行的sql语句执行即可.
    对于另一种需要返回结果集的则相对麻烦一些。执行完上面类似的语句之后,我们需要对结果集进行处理。我们可以将结果集一数组或者hash形式展现。这里 我们使用hash方式展现。
  1. res=dbh.query("SELECT name FROM test_foolfish")
  2. puts "===============\n"
  3. res.each_hash(with_table = true) do |row|
  4. printf "%d,%s\n",row["test_rb.id"],row["test_rb.name"]
  5. end
    each_hash方法当中添加with_table = true参数可以保证在执行多表查询的时候,多张表具有相同字段的尴尬。这样我们hash的key值就可以用“表名.列名”的形式出现。
    怎么样,很简单吧。试一试吧。今天也只看了一点点。等研究多了,再发布点新东西

阅读(1164) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~