Ruby 连接MySQL数据库

使用Ruby连接数据库的过程还真的是坎坷,于是写点文字记录一下。

    • 简介

      • Ruby简介
      • RubyGems简介
        • 包管理之道
        • 比较著名的包管理举例
      • 细说gem
        • 常用的命令
    • 准备
      • 驱动下载

        • dbi
        • mysql
        • mysql2
        • MySQL的CC连接器
      • 测试环境
    • 代码测试
      • 连接数据库
      • CRUD
        • Select
        • Delete
        • Update
        • Insert
      • 仿PreparedStatement
        • 假冒伪劣版
        • 假冒伪劣进阶版
      • 处理结果集
        • 表结构
        • 结果集遍历
    • 总结

简介

Ruby简介

Ruby是一种纯粹的面向对象编程语言。它由日本的松本行弘(まつもとゆきひろ/Yukihiro Matsumoto)创建于1993年······

简介就介绍到这么多了,反正也没人愿意看这些文字。下面着重讲下一个小结。

RubyGems简介

包管理之道

在说RubyGems之前,我们来谈一谈关于包管理。在没有包管理软件之前,我们要想完成一个库或者软件的安装,要处理好这些东西之间的依赖以及版本关系等等,总之,对于新手而言,这无疑是加大了学习的曲线。而包管理的诞生,把我们从繁琐复杂的安装过程中解放了出来。

比较著名的包管理举例

  • 作为一个程序员,想必都接触过Linux系统,在其之上的包管理软件也有很多,比如Ubuntu的apt-get,Redhat的rpm,yum;Debian系列的dpkg等等;
  • 或者Node.js语言的npm;
  • Python 的easy_install 或者久负盛名的pip
  • 还有今天我们要说的Ruby 中的gem

细说gem

Gem 是 Ruby 模块 (叫做 Gems) 的包管理器。其包含包信息,以及用于安装的文件。

其原理是:

Gem通常是依照”.gemspec”文件构建的,包含了有关Gem信息的YAML文件。Ruby代码也可以直接建立Gem,这种情况下通常利用Rake来进行。

常用的命令

gem命名和Python的pip很相似,其实大部分的包管理使用起来都很类似,现简要的介绍一下吧。

  • 安装

    gem install mygem

  • 卸载

    gem uninstall mygem

  • 列出已经安装的gem

    gem list –local

  • 列出可用的gem

    gem list –remote

  • 为所有的gems创建RDoc文档

    gem rdoc -all

  • 下载一个gem,但不安装

    gem fetch mygem

  • 从可用的gems中搜索gem

    gem search STRING –remote

准备

要想使用Ruby连接数据库,我们就需要跨进程操作了。所以我们必须借助驱动来完成这两个工作模式完全不同的进程。那么,交给驱动来解决这个问题吧。

驱动下载

连接MySQL数据库,常见的几种方式如下。

dbi

这就是DBI的工作原理,我们只需要调用封装好了的API就可以实现对不同数据库的操作,这对于移植来说会很方便。

Administrator@WIN-5APATS8G3U6 MINGW64 /d/Software/ruby/Ruby23-x64/lib/ruby/gems/2.3.0/gems
$ gem install dbi
Successfully installed dbi-0.4.5
Parsing documentation for dbi-0.4.5
Done installing documentation for dbi after 1 seconds
1 gem installed

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

如此便成功安装了DBI模块。具体参照DBI 模块

mysql

不巧的是,我在安装mysql模块的时候出现了下面的这些个问题。根据错误提示我们需要使用dev工具来安装才行,但是mysql模块安装不成功并不影响我们对数据库的操作,所以这个问题就先放放一放吧。

$ gem install mysql
ERROR:  Error installing mysql:
        The ‘mysql‘ native gem requires installed build tools.

Please update your PATH to include build tools or download the DevKit
from ‘http://rubyinstaller.org/downloads‘ and follow the instructions
at ‘http://github.com/oneclick/rubyinstaller/wiki/Development-Kit‘
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

mysql2

Ruby 连接 Mysql 更高效的驱动 mysql2,目前也推荐使用这种方式连接 MySql。

安装过程同样是很简单。

gem install mysql2

$ gem install mysql2

Successfully installed mysql2-0.4.4-x64-mingw32
Parsing documentation for mysql2-0.4.4-x64-mingw32
Done installing documentation for mysql2 after 0 seconds
1 gem installed
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

MySQL的C/C++连接器

libmysql.dll 文件是MySQL的动态链接库文件,缺少此文件数据库无法正常工作。将这个文件 拷贝到 Ruby/Bin目录中,或者C:\windows\system32目录也可。

下载地址

点击msi版本的安装即可。

测试环境

基本上准备工作完成了,下面说一下我的实验环境。

  • OS: Windows 7 旗舰版
  • Ruby版本: ruby 2.3.1p112 (2016-04-26 revision 54768) [x64-mingw32]
  • IDE: RubyMine 2016.2
  • MySQL版本: MySQL 5 .7

代码测试

下面真正开始使用Ruby操作MySQL数据库。根据Unix思想“做一件事,就用最好的方式,做到最好”,于是下面我就采用mysql2模块来操作了。

连接数据库

首先是连接数据库。如下:

require ‘mysql2‘

client = Mysql2::Client.new(
    :host     => ‘127.0.0.1‘, # 主机
    :username => ‘root‘,      # 用户名
    :password => ‘123456‘,    # 密码
    :database => ‘test‘,      # 数据库
    :encoding => ‘utf8‘       # 编码
    )
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

里面的值视自己的情况而定。

CRUD

使用Ruby操作数据库实现增删改查也是很方便的一件事,至少和Python一样简洁。

Select

require ‘mysql2‘

client = Mysql2::Client.new(
    :host     => ‘127.0.0.1‘, # 主机
    :username => ‘root‘,      # 用户名
    :password => ‘mysql‘,    # 密码
    :database => ‘fams‘,      # 数据库
    :encoding => ‘utf8‘       # 编码
)

result = client.query("Select * from dog")
result.each do |item|
  puts "In row :#{item[‘id‘]} the dog‘s name is :#{item[‘name‘]}"
end
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

获得的结果如下:

D:\Software\ruby\Ruby23-x64\bin\ruby.exe -e $stdout.sync=true;$stderr.sync=true;load($0=ARGV.shift) E:/Code/ruby/helloworld/hello.rb
{"VERSION()"=>"5.7.13-log"}
In row :1 the dog‘s name is :lachang
In row :2 the dog‘s name is :hashiqi
In row :3 the dog‘s name is :samoyed
In row :4 the dog‘s name is :wolf

Process finished with exit code 0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

Delete

require ‘mysql2‘

client = Mysql2::Client.new(
    :host     => ‘127.0.0.1‘, # 主机
    :username => ‘root‘,      # 用户名
    :password => ‘mysql‘,    # 密码
    :database => ‘fams‘,      # 数据库
    :encoding => ‘utf8‘       # 编码
)

client.query("delete from dog where id = 5")
result = client.query("Select * from dog")

result.each do |item|
  puts "In row :#{item[‘id‘]} the dog‘s name is :#{item[‘name‘]}"
end
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

结果如下:

In row :1 the dog‘s name is :lachang
In row :2 the dog‘s name is :hashiqi
In row :3 the dog‘s name is :samoyed
In row :4 the dog‘s name is :wolf
  • 1
  • 2
  • 3
  • 4

Update

require ‘mysql2‘

client = Mysql2::Client.new(
    :host     => ‘127.0.0.1‘, # 主机
    :username => ‘root‘,      # 用户名
    :password => ‘mysql‘,    # 密码
    :database => ‘fams‘,      # 数据库
    :encoding => ‘utf8‘       # 编码
)

client.query("update dog set name=‘郭璞‘ where id = 2")
result = client.query("Select * from dog")

result.each do |item|
  puts "In row :#{item[‘id‘]} the dog‘s name is :#{item[‘name‘]}"
end
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

获得的结果为:

In row :1 the dog‘s name is :lachang
In row :2 the dog‘s name is :郭璞
In row :3 the dog‘s name is :samoyed
In row :4 the dog‘s name is :wolf
  • 1
  • 2
  • 3
  • 4

Insert

require ‘mysql2‘

client = Mysql2::Client.new(
    :host     => ‘127.0.0.1‘, # 主机
    :username => ‘root‘,      # 用户名
    :password => ‘mysql‘,    # 密码
    :database => ‘fams‘,      # 数据库
    :encoding => ‘utf8‘       # 编码
)

client.query("insert into dog(name) values(‘哈士奇‘)")
result = client.query("Select * from dog")

result.each do |item|
  puts "In row :#{item[‘id‘]} the dog‘s name is :#{item[‘name‘]}"
end
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

处理结果为

In row :1 the dog‘s name is :lachang
In row :2 the dog‘s name is :hashiqi
In row :3 the dog‘s name is :samoyed
In row :4 the dog‘s name is :wolf
In row :5 the dog‘s name is :哈士奇
  • 1
  • 2
  • 3
  • 4
  • 5

仿PreparedStatement

用过JDBC的PreparedStatement的API的都知道其好处,所以我们在这里要模拟一下。

“假冒伪劣版”

name = "CSDN 博客小札"
client.query("update dog set name=‘"+name+"‘ where id = 2")
result = client.query("Select * from dog")
  • 1
  • 2
  • 3

“假冒伪劣进阶版”

或者这样的:

name = "CSDN 博客小小札"
client.query("update dog set name=‘#{name}‘ where id = 2")
result = client.query("Select * from dog")
  • 1
  • 2
  • 3

实际上我们不难看出,其还是对SQL语句的拼凑,并不是真正的Prepared方式。所以在书写sql语句的时候要格外用心啊。

处理结果集

其实在上面的CRUD操作中我们就可以看到。我们经常采用遍历操作来获取结果集中的详细信息。我们在操作的时候一定是需要知道结果集中的数据字段信息的,这样才能较好的实现我们的需求。

表结构

本例中表结构的详细信息为:

mysql> desc dog;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int(10)     | NO   | PRI | NULL    | auto_increment |
| name  | varchar(30) | NO   |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+
2 rows in set (0.12 sec)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

结果集遍历

result.each do |item|
  puts "In row :#{item[‘id‘]} the dog‘s name is :#{item[‘name‘]}"
end
  • 1
  • 2
  • 3

如此即可,遵守其规则之后,我们也会发现,不过如此了。

总结

对于Ruby而言,貌似真的是不太适合在Windows下学习,毕竟资料方面真的是太少了。而且有很多操作没有相关的命令,也让人很沮丧。不过我相信,只要用心学,就能学好Ruby的。

与君共勉 :-)

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

原文地址:https://www.cnblogs.com/djuwcnhwbx/p/10323622.html

时间: 2024-10-11 04:10:28

Ruby 连接MySQL数据库的相关文章

mybatis连接mysql数据库插入中文乱码

对于mysql数据库的乱码问题,有两中情况: 1. mysql数据库编码问题(建库时设定). 2. 连接mysql数据库的url编码设置问题. 对于第一个问题,目前个人发现只能通过重新建库解决,建库的时候,选择UTF-8字符集.我试过修改现有数据库字符集为UFT -8,但是根本不起作用,插入的中文仍然乱码(中文显示成:???).重建库时选择字符集为UTF-8之后,中文正常显示了. 对于第二个问题,是这样 的情况:我建库时设置了数据库默认字符集为UTF-8,通过mysql workbench直接插

用MyEclipse10.0远程连接Mysql数据库服务器

说明:本文档所有的操作均在满足以下条件的情况下操作, A.远程Linux服务器已经安装好MySQL数据库 B.本地电脑可以ping通远程服务器 C.已经成功安装了Myeclipse 一.下载mysql-connector-java-3.1.14-bin.jar 这个是连接mysql数据库的驱动器. 下载地址: http://dev.mysql.com/downloads/connector/j/5.0.html 也可以到官方网站下载,网址如下:www.mysql.com 二.在Myeclipse

Linux系统Java连接Mysql数据库

Linux系统下Java连接Mysql数据库方法与Windows下类似,具体步骤如下: 下载JDBC(驱动):mysql-connector-java-5.1.37.tar.gz 解压下载的数据包:tar -zxvf mysql-connector-java-5.1.37.tar.gz 解压后,mysql-connector-java-5.1.29-bin.jar位于mysql-connector-java-5.1.29目录下. 配置解压后,mysql-connector-java-5.1.29

C#连接MySql数据库的方法

1.要连接MySql数据库必须首先下载MySql的连接.net的文件, 文件下载地址为http://download.csdn.net/detail/xiaoliu123586/91455792.解压缩刚才下载的mysql-connector-net-6.6.6-noinstall.zip文件,里面有几个版本选择,在这里我选V4, 选中V4.0中所有文件几个文件,然后添加到C#项目的引用中,然后就可以编写程序进行数据库的操作了. 3.数据库操作代码 InsertMySql.cs 1 using

hibernate简单连接mysql数据库配置

使用hibernate连接mysql数据库 1:项目搭建好之后,在lib包中添加必要的jar包,和mysql数据库驱动jar包: jar包可以在hibernate的下载包(hibernate3.3.2.GA)中找到,这里所需要的jar包是: hibernate3.jar,lib/required目录下的所有jar包; 连接数据库所需要的jar包:mysql-connector-java-5.1.7-bin.jar; 如图: 2:jar包引入后编写实体类及映射文件: 实体类是xx.java文件;映

Hibernate连接MySQL数据库乱码相关问题

1.查看MySQL字符编码 >show variables like 'character%'; #执行编码显示 其中character_set_client,character_set_results,character_set_connection三个运行变量是造成乱码的关键 2.修改MySQL编码格式为UTF8 编辑my.ini,(注意:不是utf-8,也要注意大小写) 找到客户端配置[client] 在下面添加 ### 默认字符集为utf8 default-character-set=u

QTP连接MYSQL数据库方法

1.首先安装mysql数据驱动,qtp在windows系统下操作连接mysql,所以下载mysql-connector-odbc-   5.1.8-win32.msi 下载地址:http://mysql.mirrors.pair.com/Downloads/Connector-ODBC/5.1/mysqlconnector-odbc-5.1.8-win32.msi 2.安装mysql驱动 ,默认安装即可. 3. 添加默认数据源 控制面板->管理工具->数据源ODBC->系统DNS->

MVC3、如何应用EntityFramework 连接MySql 数据库

原文:MVC3.如何应用EntityFramework 连接MySql 数据库 新的一年,新的开始. 今天总结的主题是在MySql中应用EntityFramework 的Code First模式. 开发环境:Win8 + MySql5.5 +VS 2012. 第一步是在数据库中新建一个表,具体字段如下图. 在表中添加若干数据: 数据建好之后,下面就是在项目中引用EntityFramework了. 二,在项目中新建一个实体类Product public class Product    {    

C语言连接MySQL数据库(课程设计总结)

刚结束课程设计,也预示着假期马上就要到来了.本次课程设计并不算难,无非就是让做一个XXX系统,实现用户的注册.登录.菜单管理.超级用户等等一些功能,到现在为止已经做过好几个了,所以基本流程都熟悉了!我觉的最值得总结的地方就是:C语言与数据库连接,这块内容!因为之前都是用文件实现的. ★平台 这次课程设计主要用到: ● VC ++ 6.0 ● mysql-5.0.18-win32 ● Navicat for MySQL(MySQL 图形化的工具) ★配置 在写代码之前首先要让编译器知道MySQL数